欢迎光临散文网 会员登陆 & 注册

Java登不上SQL编辑器,IO流,转换流字节转字符,swing,二进制JDBC,保存图片诗书画唱

2020-07-20 17:40 作者:诗书画唱  | 我要投稿

当登不上SQL编辑器的时候,可能是自己写的服务器名称不存在,所有就去把服务器名称改为“.",可代表所有的所有的服务器名称。


SQL编辑器中储存图片的二进制的形式要用“image”的数据类型,而不是字符串(长度最大为8000)的类型,因为可能会存不下(亲身经历的总结)。

案例1:在项目根目录新建一个txt文件,提示用户输入内容,知道输入“no”后结束输入,将其保存到该文件中,要求保存的格式为utf-8(文件本身的格式不可改变,但是保存到文本内容用转换流保存为自己要保存的格式)



//案例1:在项目根目录新建一个txt文件,

//提示用户输入内容,知道输入“no”后结束输入,

//将其保存到该文件中,要求保存的格式为utf-8

package zhuanHuaLiu;

import java.io.*;

import java.util.*;

public class shuRu {

public static void main(String[] args) throws Exception {

File newWenJian=new File("src//new.txt");

if(newWenJian.exists()){

newWenJian.delete();

newWenJian.createNewFile();

}else{

newWenJian.createNewFile();

}


while(true){


System.out.println("请输入内容(输入“no”后结束输入)");


Scanner shuRu=new Scanner(System.in);

String jieShouHang=shuRu.nextLine();

if(!jieShouHang.equals("no")){

InputStreamReader shuRuLiu=new InputStreamReader

(new FileInputStream(newWenJian),"UTF-8");

//FileOutputStream outputStream = new FileOutputStream(newWenJian); 

//OutputStreamWriter outputWriter=

//new OutputStreamWriter(outputStream,"utf-8");


FileWriter xieRu=new FileWriter(newWenJian , true);

xieRu.write(jieShouHang);

xieRu. flush();

xieRu. close();

System.out.println("追加成功!");


// BufferedWriter shuRuLiu=

// new BufferedWriter(new FileWriter(newWenJian));

// shuRuLiu.write(jieShouHang);

// shuRuLiu.flush();

// shuRuLiu.close();

System.out.println("输入的内容已经写入到new.txt中");

}

else{


System.out.println("输入的内容为no!结束输入!");

System.exit(0);




}



}


}



}






案例2:读取保存的文件的信息,要求读取的格式分别为gbk,utf-8


package zhuanHuaLiu;

 

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

 

/*

    FileReader可以读取IDE默认编码格式(UTF-8)的文件

    FileReader读取系统默认编码(中文GBK)会产生乱码

 */

public class baoLiu {

    public static void main(String[] args) throws IOException {

    System.out.println("从UTF-8.txt读取的内容:"); 

    duQu("UTF-8.txt","UTF-8");

    System.out.println("\n\n从GBK.txt读取的内容:"); 

        duQu("GBK.txt","GBK");

    }


private static void duQu(String luJing,String bianMaGeShi) 

throws FileNotFoundException, IOException {



// FileReader fr = new FileReader(luJing);


InputStreamReader jieMa =

new InputStreamReader(new FileInputStream(luJing),bianMaGeShi);

//:InputStreamReader YYY =

//new InputStreamReader(new FileInputStream(ZZZ),XXX);

// :表示可以读取中文不乱码的编码格式为"XXX"


// OutputStreamWriter bianMa =

// new OutputStreamWriter

// (new FileOutputStream(luJing),"UTF-8");

        int len = 0;

        while((len = jieMa.read())!=-1){

       

            System.out.print((char)len);

        }

        jieMa.close();

}

}







扩展:

获取编码格式:





案例3:使用转换流读取一张文本信息,要求读取的格式为UTF-8,将内容保存到数据库





create table wenBen(


wenBenId int primary key identity(1, 1),


wenBenNeiRong nvarchar(100) not null

)

select * from wenBen




package zhuanHuaLiu;

import java.io.*;

import java.sql.*;

import java.util.*;


public class zhuanHuan {

public static void main(String[] args) throws Exception{


// Just do it!你好!请给我(诗书画唱)三连和关注!

File f=new File("aa.txt");

InputStreamReader shuRuLiu=new InputStreamReader

(new FileInputStream(f),"UTF-8");

//:这样会中文乱码

//InputStreamReader isr=new InputStreamReader

//(new FileInputStream(f));这样就不会中文乱码

BufferedReader huanChongLiu=new BufferedReader(shuRuLiu);

String ziFuChuan="";

ArrayList<String> jiHe=new ArrayList<String>();

while((ziFuChuan=huanChongLiu.readLine())!=null){

jiHe.add(ziFuChuan);

}

shuRuLiu.close();

Connection con=DBUtilsPreparedStatement.getCon();

for(String i:jiHe){

DBUtilsPreparedStatement.ZSG("insert into wenBen values(?)",con,i);

}




}


}



package zhuanHuaLiu;

import java.io.InputStream;

import java.sql.*;

import java.util.Properties;


class DBUtilsPreparedStatement{

static String url,root,uname,pwd=null;

static PreparedStatement ps=null;

static Connection con=null;

static ResultSet res=null;

static{

InputStream is=DBUtilsPreparedStatement.class.

getResourceAsStream("./database.properties");

Properties p=new Properties();

try {

p.load(is);

url=p.getProperty("url");

root=p.getProperty("root");

uname=p.getProperty("uname");

pwd=p.getProperty("pwd");


Class.forName(root);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static Connection getCon(){

if(con==null){

try {

con=DriverManager.getConnection(url,uname,pwd);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return con;

}

public static ResultSet Select(String sql,Connection con1,Object... o){

con=con1;

System.out.println(sql);

try {

ps=con.prepareStatement(sql);

for(int i=0;i<o.length;i++){

ps.setObject(i+1,o[i]);

}

res=ps.executeQuery();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return res;

}

public static boolean ZSG(String sql,Connection con1,Object... o){

con=con1;

boolean b=false;

try {

ps=con.prepareStatement(sql);

for(int i=0;i<o.length;i++){

ps.setObject(i+1,o[i]);

}

int num=ps.executeUpdate();

if(num>0){

b=true;

}

} catch (Exception e) {

e.printStackTrace();

}

return b;

}

}



url=jdbc:sqlserver://localhost;databaseName=yonghu

uname=qqq

pwd=123

root=com.microsoft.sqlserver.jdbc.SQLServerDriver







案例4:使用数据库保存一张图片,并将其读取出来,数据库图片列设置为image,使用字节流或者字节缓冲流来做

create table img(


imgId int primary key identity(1, 1),


img image not null

)

--drop table img

select * from img




package zhuanHuaLiu;


import java.io.*;

import java.sql.*;


public class imgBaoCun {


public static void main(String[] args) throws Exception {


File img=new File("7.jpg");


// FileInputStream:字节输入流

// 由in联想到输入进入里面。由out联想到输处出去到外面。

// FileOutputStream:字节输出流

FileInputStream ziJieShuRuLiu=new FileInputStream(img);

byte[] ziJieShuZu=new byte[(int)img.length()];

//:这里把图片转换为二进制

ziJieShuRuLiu.read(ziJieShuZu);

//:用read读一次就将ziJieShuRuLiu图片

// 用ziJieShuZu的形式格式全部读完了

Connection con=DBUtilsPreparedStatement.getCon();

DBUtilsPreparedStatement.

ZSG("insert into img values (?)", con, ziJieShuZu);

System.out.println("内容存储成功");

}

}





package zhuanHuaLiu;

import java.io.InputStream;

import java.sql.*;

import java.util.Properties;


class DBUtilsPreparedStatement{

static String url,root,uname,pwd=null;

static PreparedStatement ps=null;

static Connection con=null;

static ResultSet res=null;

static{

InputStream is=DBUtilsPreparedStatement.class.

getResourceAsStream("./database.properties");

Properties p=new Properties();

try {

p.load(is);

url=p.getProperty("url");

root=p.getProperty("root");

uname=p.getProperty("uname");

pwd=p.getProperty("pwd");


Class.forName(root);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static Connection getCon(){

if(con==null){

try {

con=DriverManager.getConnection(url,uname,pwd);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return con;

}

public static ResultSet Select(String sql,Connection con1,Object... o){

con=con1;

// System.out.println(sql);

try {

ps=con.prepareStatement(sql);

for(int i=0;i<o.length;i++){

ps.setObject(i+1,o[i]);

}

res=ps.executeQuery();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return res;

}

public static boolean ZSG(String sql,Connection con1,Object... o){

con=con1;

boolean b=false;

try {

ps=con.prepareStatement(sql);

for(int i=0;i<o.length;i++){

ps.setObject(i+1,o[i]);

}

int num=ps.executeUpdate();

if(num>0){

b=true;

}

} catch (Exception e) {

e.printStackTrace();

}

return b;

}

}


url=jdbc:sqlserver://localhost;databaseName=yonghu

uname=qqq

pwd=123

root=com.microsoft.sqlserver.jdbc.SQLServerDriver







案例5.使用swing新建一个注册界面,点击提交将用户信息提交到文件中,在用户登录的时候去文件中读取信息,判断用户是否可以进行正常登录




package zhuanHuaLiu;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.*;

import java.sql.*;


import javax.swing.*;


public class swing  extends JFrame{

public static JTextField unameKuang,pwdKuang;

public static JLabel unameWenZi, pwdWenZi = null;


public static JButton dengLuAnNiu,zhuCeAnNiu;


public static void main(String[] args) throws Exception{


new swing();

}

public swing(){


this.setLayout(null);

this.setSize(400,400);

this.setLocationRelativeTo(null);

unameKuang=new JTextField();

pwdKuang=new JTextField();

dengLuAnNiu=new JButton("登录");

zhuCeAnNiu=new JButton("注册");

unameWenZi=new JLabel("用户名");

pwdWenZi=new JLabel("密码");

unameKuang.setBounds(130,100,130,30);

pwdKuang.setBounds(130,140,130,30);

unameWenZi.setBounds(80,100,130,30);

pwdWenZi.setBounds(80,140,130,30);

dengLuAnNiu.setBounds(130,180,70,30);

zhuCeAnNiu.setBounds(220,180,70,30);

dengLuAnNiu.addActionListener(new shiJian());

zhuCeAnNiu.addActionListener(new shiJian());

this.add(unameWenZi);this.add(pwdWenZi);

this.add(unameKuang);this.add(pwdKuang);

this.add(dengLuAnNiu);this.add(zhuCeAnNiu);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);



}

}

class shiJian implements ActionListener{


@Override

public void actionPerformed(ActionEvent e) {

try {

String neiRong=e.getActionCommand();

if(neiRong.equals("登录")){

//用.getText().trim();

// (去除其中空格后)得到用户输入的用户名和密码

String uname=swing.unameKuang.getText().trim();

String pwd=swing.pwdKuang.getText().trim();

System.out.println("用户名:"+uname+"  :   密码:"+pwd);

//让用户输入的内容和文件中的内容相比较,

//如果都相等的时候就可以登录,否则不能登录。

//读取文件:

File wenJian=new File("aa.txt");

FileReader duQu=new FileReader(wenJian);

char[] charShuZu=new char[100];

int len;

//因为每次读的内容都是一个字符数据,所以

//将读取的所有内容拼接为一个StringBuffer:

StringBuffer ziFuChuanHuanChing=new StringBuffer();

// String和StringBuffer他们都可以存储和操作字符串,

// 即包含多个字符的字符串数据。

// String类是字符串常量,是不可更改的常量。

// 而StringBuffer是字符串变量,它的对象是可以扩充和修改的。

while((len=duQu.read(charShuZu))!=-1){

ziFuChuanHuanChing.append(new String(charShuZu,0,len));

}

duQu.close();

String[] StringShuZu=

ziFuChuanHuanChing.toString().split("\\|");//转义符号


// (1)split表达式,其实就是一个正则表达式。

// *  ^ | 等符号在正则表达式中属于一种有特殊含义的字符,

// 如果使用此种字符作为分隔符,必须使用转义符即\\加以转义。

//    (2)如果使用多个分隔符则需要借助 | 符号,如二所示,

// 但需要转义符的仍然要加上分隔符进行处理

//

//

//

// 所有的ASCII码都可以用“\”加数字(一般是8进制数字)

// 来表示。而C中定义了一些字母前加

// "\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,"

// + "就称为转义字符,因为后面的字符,"

// + "都不是它本来的ASCII字符意思了。



for(String i:StringShuZu){

String[] douHao=i.split(",");

if(douHao.length!=2){

//JOptionPane.showMessageDialog(null,"登录失败");

continue;

}

if(douHao[0].equals(uname)&&douHao[1].equals(pwd)){

JOptionPane.showMessageDialog(null,"登录成功");

return;

}

}

JOptionPane.showMessageDialog(null,"登录失败,"

+ "可能是没注册,或密码等填写有误,先注册! ");

}else if(neiRong.equals("注册")){

//找到这个文件:

File weJian=new File("aa.txt");

//得到用户输入的用户名和密码

String uname=swing.unameKuang.getText().trim();

String pwd=swing.pwdKuang.getText().trim();

FileWriter zhuiJiaXieRu=new FileWriter(weJian,true);

//字符串拼接qqq   www

//难题:就是取内容的时候,怎么区分开我保存的内容:用split

String neirong=uname+","+pwd+"|";

zhuiJiaXieRu.write(neirong);

zhuiJiaXieRu.close();

}

} catch (Exception e2) {

e2.printStackTrace();

}

}


}





将字节转为字符:


package zhuanHuaLiu;


import java.io.*;


public class ziJieZiFu {

public static void main(String[] args) throws Exception{

//转换流:

// 将字节转为字符。is为InputStream的缩写

InputStream shuRu=System. in;

//如果想让标准输入接收为字符,就用转换流:

// isr为InputStreamReader的缩写

InputStreamReader duQi=new InputStreamReader(shuRu);

char[] shuZu=new char [100] ;

// cs为“chars”的缩写,代表有很多个char,为字符数组

// changDu:长度

int changDu=duQi. read(shuZu);

// len为length的缩写

System. out . println(new String(shuZu ,0,changDu));

}

}




读取一个相对路径的有中文的txt文件,用转码器,输入流读取内容输入到转码码器,用循环语句,字符数组输出内容,要求不出现乱码:





package zhuanHuaLiu;


import java.io.*;


public class Chinese {

public static void main(String[] args) throws Exception{

File f=new File("aa.txt");

// input

//

// 输入常用释义

// 英 [ˈɪnpʊt]美 [ˈɪnˌpᴜt]

// n.

// 放入物;带入物;被操作物;输入端;输入装置;输入;能量输入;电信号;捐献;投入

// v.

// 输入

InputStreamReader zhuanMaQi=new InputStreamReader

(new FileInputStream(f) , "gb2312");

// zhuanMaQi:转码器

// InputStreamReader就是一种转码器

// gb2312:为某种编码格式

char[] shuZu=new char[100] ; 

int changDu;

while( (changDu=zhuanMaQi.read(shuZu))!=-1){

System. out . println(new String(shuZu, 0,changDu));

}

zhuanMaQi. close();

}

}





请编写代码把一个GBK的文本文件内容读取后存储到

一个UTF-8的文本文件中。(不论平台是什么字符编码)















package zhuanHuaLiu;


import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;


public class baoLiu {

public static void main(String[] args) throws IOException {

String src = "GBK.txt";//GBK的文本文件

String dest = "UTF-8.txt";//UTF-8的文本文件

// 不清楚当前平台的字符编码时,

//读取就只能选择字节输入流 ( FileInputStream)

// 和使用 InputStreamReader(进行解码,解析出格式),

// 就像把"塑料融化",之后方便"变成",设置成别的格式,"形状",

// 之后输出时才可以设置别的格式。

InputStreamReader jieMa =

new InputStreamReader(new FileInputStream(src),"GBK");

//输出时只能选择  FileOutputStream (字节输出流)

//和用OutputStreamWriter(进行编码,设置编码格式)

OutputStreamWriter bianMa =

new OutputStreamWriter(new FileOutputStream(dest),"UTF-8");


//一边读一边写:

//从jieMa中读取,已经解码后的数据,是字符流。

//从bianMa写出时,先写字符流,然后bianMa按照指定的编码方式,

//再写到FileOutputStream流中,再写到文件中

char[] charShuZu = new char[1024];

int len;

while((len = jieMa.read(charShuZu)) != -1){

bianMa.write(charShuZu, 0, len);

}


//关闭解码和编码部分:

bianMa.close();

jieMa.close();

}

}





执行代码后:




注释:

【char[] charShuZu = new char[1024];

int len;

while((len = jieMa.read(charShuZu)) != -1){

// len = jieMa.read(charShuZu):逐个解码



bianMa.write(charShuZu, 0, len);


// bianMa.write(charShuZu, 0, len):进行编码

}








Java登不上SQL编辑器,IO流,转换流字节转字符,swing,二进制JDBC,保存图片诗书画唱的评论 (共 条)

分享到微博请遵守国家法律