Java登不上SQL編輯器,IO流,轉(zhuǎn)換流字節(jié)轉(zhuǎn)字符,swing,二進(jìn)制JDBC,保存圖片詩書畫唱

當(dāng)?shù)遣簧蟂QL編輯器的時候,可能是自己寫的服務(wù)器名稱不存在,所有就去把服務(wù)器名稱改為“.",可代表所有的所有的服務(wù)器名稱。
SQL編輯器中儲存圖片的二進(jìn)制的形式要用“image”的數(shù)據(jù)類型,而不是字符串(長度最大為8000)的類型,因為可能會存不下(親身經(jīng)歷的總結(jié))。

案例1:在項目根目錄新建一個txt文件,提示用戶輸入內(nèi)容,知道輸入“no”后結(jié)束輸入,將其保存到該文件中,要求保存的格式為utf-8(文件本身的格式不可改變,但是保存到文本內(nèi)容用轉(zhuǎn)換流保存為自己要保存的格式)

//案例1:在項目根目錄新建一個txt文件,
//提示用戶輸入內(nèi)容,知道輸入“no”后結(jié)束輸入,
//將其保存到該文件中,要求保存的格式為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("請輸入內(nèi)容(輸入“no”后結(jié)束輸入)");
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("輸入的內(nèi)容已經(jīng)寫入到new.txt中");
}
else{
System.out.println("輸入的內(nèi)容為no!結(jié)束輸入!");
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默認(rèn)編碼格式(UTF-8)的文件
? ? FileReader讀取系統(tǒng)默認(rèn)編碼(中文GBK)會產(chǎn)生亂碼
?*/
public class baoLiu {
? ? public static void main(String[] args) throws IOException {
? ? System.out.println("從UTF-8.txt讀取的內(nèi)容:");?
? ? duQu("UTF-8.txt","UTF-8");
? ? System.out.println("\n\n從GBK.txt讀取的內(nèi)容:");?
? ? ? ? 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();
}
}






擴(kuò)展:
獲取編碼格式:

案例3:使用轉(zhuǎn)換流讀取一張文本信息,要求讀取的格式為UTF-8,將內(nèi)容保存到數(shù)據(jù)庫

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!你好!請給我(詩書畫唱)三連和關(guān)注!
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:使用數(shù)據(jù)庫保存一張圖片,并將其讀取出來,數(shù)據(jù)庫圖片列設(shè)置為image,使用字節(jié)流或者字節(jié)緩沖流來做

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:字節(jié)輸入流
// 由in聯(lián)想到輸入進(jìn)入里面。由out聯(lián)想到輸處出去到外面。
// FileOutputStream:字節(jié)輸出流
FileInputStream ziJieShuRuLiu=new FileInputStream(img);
byte[] ziJieShuZu=new byte[(int)img.length()];
//:這里把圖片轉(zhuǎn)換為二進(jìn)制
ziJieShuRuLiu.read(ziJieShuZu);
//:用read讀一次就將ziJieShuRuLiu圖片
// 用ziJieShuZu的形式格式全部讀完了
Connection con=DBUtilsPreparedStatement.getCon();
DBUtilsPreparedStatement.
ZSG("insert into img values (?)", con, ziJieShuZu);
System.out.println("內(nè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



案例5.使用swing新建一個注冊界面,點擊提交將用戶信息提交到文件中,在用戶登錄的時候去文件中讀取信息,判斷用戶是否可以進(jìn)行正常登錄

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);
//讓用戶輸入的內(nèi)容和文件中的內(nèi)容相比較,
//如果都相等的時候就可以登錄,否則不能登錄。
//讀取文件:
File wenJian=new File("aa.txt");
FileReader duQu=new FileReader(wenJian);
char[] charShuZu=new char[100];
int len;
//因為每次讀的內(nèi)容都是一個字符數(shù)據(jù),所以
//將讀取的所有內(nèi)容拼接為一個StringBuffer:
StringBuffer ziFuChuanHuanChing=new StringBuffer();
// String和StringBuffer他們都可以存儲和操作字符串,
// 即包含多個字符的字符串?dāng)?shù)據(jù)。
// String類是字符串常量,是不可更改的常量。
// 而StringBuffer是字符串變量,它的對象是可以擴(kuò)充和修改的。
while((len=duQu.read(charShuZu))!=-1){
ziFuChuanHuanChing.append(new String(charShuZu,0,len));
}
duQu.close();
String[] StringShuZu=
ziFuChuanHuanChing.toString().split("\\|");//轉(zhuǎn)義符號
// (1)split表達(dá)式,其實就是一個正則表達(dá)式。
// *? ^ | 等符號在正則表達(dá)式中屬于一種有特殊含義的字符,
// 如果使用此種字符作為分隔符,必須使用轉(zhuǎn)義符即\\加以轉(zhuǎn)義。
//? ? (2)如果使用多個分隔符則需要借助 | 符號,如二所示,
// 但需要轉(zhuǎn)義符的仍然要加上分隔符進(jìn)行處理
//
//
//
// 所有的ASCII碼都可以用“\”加數(shù)字(一般是8進(jìn)制數(shù)字)
// 來表示。而C中定義了一些字母前加
// "\"來表示常見的那些不能顯示的ASCII字符,如\0,\t,\n等,"
// + "就稱為轉(zhuǎ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
//難題:就是取內(nèi)容的時候,怎么區(qū)分開我保存的內(nèi)容:用split
String neirong=uname+","+pwd+"|";
zhuiJiaXieRu.write(neirong);
zhuiJiaXieRu.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}






將字節(jié)轉(zhuǎn)為字符:

package zhuanHuaLiu;
import java.io.*;
public class ziJieZiFu {
public static void main(String[] args) throws Exception{
//轉(zhuǎn)換流:
// 將字節(jié)轉(zhuǎn)為字符。is為InputStream的縮寫
InputStream shuRu=System. in;
//如果想讓標(biāo)準(zhǔn)輸入接收為字符,就用轉(zhuǎn)換流:
// isr為InputStreamReader的縮寫
InputStreamReader duQi=new InputStreamReader(shuRu);
char[] shuZu=new char [100] ;
// cs為“chars”的縮寫,代表有很多個char,為字符數(shù)組
// changDu:長度
int changDu=duQi. read(shuZu);
// len為length的縮寫
System. out . println(new String(shuZu ,0,changDu));
}
}



讀取一個相對路徑的有中文的txt文件,用轉(zhuǎn)碼器,輸入流讀取內(nèi)容輸入到轉(zhuǎn)碼碼器,用循環(huán)語句,字符數(shù)組輸出內(nèi)容,要求不出現(xiàn)亂碼:



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.
// 放入物;帶入物;被操作物;輸入端;輸入裝置;輸入;能量輸入;電信號;捐獻(xiàn);投入
// v.
// 輸入
InputStreamReader zhuanMaQi=new InputStreamReader
(new FileInputStream(f) , "gb2312");
// zhuanMaQi:轉(zhuǎn)碼器
// InputStreamReader就是一種轉(zhuǎn)碼器
// 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的文本文件內(nèi)容讀取后存儲到
一個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的文本文件
// 不清楚當(dāng)前平臺的字符編碼時,
//讀取就只能選擇字節(jié)輸入流 ( FileInputStream)
// 和使用 InputStreamReader(進(jìn)行解碼,解析出格式),
// 就像把"塑料融化",之后方便"變成",設(shè)置成別的格式,"形狀",
// 之后輸出時才可以設(shè)置別的格式。
InputStreamReader jieMa =
new InputStreamReader(new FileInputStream(src),"GBK");
//輸出時只能選擇? FileOutputStream (字節(jié)輸出流)
//和用OutputStreamWriter(進(jìn)行編碼,設(shè)置編碼格式)
OutputStreamWriter bianMa =
new OutputStreamWriter(new FileOutputStream(dest),"UTF-8");
//一邊讀一邊寫:
//從jieMa中讀取,已經(jīng)解碼后的數(shù)據(jù),是字符流。
//從bianMa寫出時,先寫字符流,然后bianMa按照指定的編碼方式,
//再寫到FileOutputStream流中,再寫到文件中
char[] charShuZu = new char[1024];
int len;
while((len = jieMa.read(charShuZu)) != -1){
bianMa.write(charShuZu, 0, len);
}
//關(guān)閉解碼和編碼部分:
bianMa.close();
jieMa.close();
}
}

執(zhí)行代碼后:

注釋:
【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):進(jìn)行編碼
}

】