当登不上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 jiHe=new ArrayList();
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
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
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
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
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):进行编码
}
】