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

Java:IO流,增删改查,配置文件,预处理后的DBUtils,含个人详细总结【诗书画唱】

2020-07-09 14:23 作者:诗书画唱  | 我要投稿

创建数据库表stu,结构uid,uname,upwd,umoney,使用预处理和配置文件制作增删改查程序


create table stu(



uid int primary key identity(1, 1),


uname nvarchar (20) ,


upwd nvarchar (20),



umoney int

)


insert into stu values('诗书','0',233)








insert into stu values('江唯','1',666)








insert into stu values('嘉怡','2',777)








insert into stu values('画唱','3',888)








insert into stu values('点赞','4',999)








--select * from stu




--delete  from stu




--drop table stu



package liZi;

import java.io.*;

import java.util.*;

import java.sql.*;

public class peiZhi {

public static void main(String[] args)

throws Exception{


System.out.println("查表的所有信息:\n");

// selectSql:查询的SQL语句

String selectAllSql="select * from stu";


ResultSet resNeiRong1=DBUtils.Select(selectAllSql);

selectTableAll(resNeiRong1);

System.out.println("——————————");



System.out.println("修改表的信息后查表的所有信息:\n");


String updateSql

="update stu set uname=? where uid=?";

Object[] o={"诗书画唱",1};


// Object[] o={第一个"?",第二个"?",...第n个"?"};

DBUtils.ZSG(updateSql, o);

// ______________________________



ResultSet resNeiRong2=DBUtils.Select(selectAllSql);

selectTableAll(resNeiRong2);

System.out.println("——————————");


System.out.println("删除表的信息后查表的所有信息:\n");


String deleteSql

="delete from stu where uid=?";

Object[] oo={2};


DBUtils.ZSG(deleteSql,oo);

// ______________________________

ResultSet resNeiRong3=DBUtils.Select(selectAllSql);

selectTableAll(resNeiRong3);

System.out.println("——————————");



System.out.println("增加表的信息后查表的所有信息:\n");


String insertSql

="insert into stu values(?,?,?)";

Object[] ooo={"点赞投币收藏和关注",4,666};


DBUtils.ZSG(insertSql, ooo);

// ______________________________

ResultSet resNeiRong4=DBUtils.Select(selectAllSql);

selectTableAll(resNeiRong4);

System.out.println("——————————");


}



//当有一段代码会常用,那么就会用

// 鼠标右键等的快捷键封装生成的自定义方法。


//自己总结的自定义方法模板:private static void

//方法名(被传值的类型 被传值名){内容}


// resNeiRong可获得resNeiRong1或resNeiRong2等的内容


// 下面是用快捷键封装生成的自定义方法,

// selectTableAll:查询表的所有信息。



private static void selectTableAll(ResultSet resNeiRong) 

throws SQLException {

while(resNeiRong.next()){

System.out.println("用户编号:"

+resNeiRong.getObject(1)

+"\t用户名:"

+resNeiRong.getObject(2));

}

}


}






package liZi;

import java.io.InputStream;

import java.sql.*;

import java.util.Properties;

public class DBUtils {

public static Connection con=null;

public static ResultSet res=null;

public static PreparedStatement ps=null;

public static String uname,pwd,root,url;

static{//static为每个类中最先执行的地方,因为要让这部分先执行,所以这部分外面套个static,顺序不对,就会有问题

try {

//将创建的配置文件转化为字节流信息(类加载器读):

InputStream is= DBUtils.class.getResourceAsStream("./database.properties");

Properties p=new Properties();

//字节流转为内容

p.load(is);

root=p.getProperty("root");

url=p.getProperty("url");

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,Object... o){

con=getCon();

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,Object... o){

//自己的总结:

//public static 方法的数据类型 方法名(XXX(被传值的数据类型)... 被传值名){}:表示声明了一个公共,静态,有任意数量的被传值的数据类型为XXX的被传值的方法

con=getCon();

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 (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return b;

}

}


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

uname=qqq

pwd=123

root=com.microsoft.sqlserver.jdbc.SQLServerDriver



DBUtils中nain主函数中使用方法:


package Text;

import java.io.*;

import java.util.*;

import java.sql.*;

public class DBUtils {


// 必须先把sqljdbc包导入,不然会报错

//下面的main主函数可以在这个DBUtils中直接调用

// DBUtilsprepareStatement

// 这个用了预处理的类,类里面有增删改或查的方法

// 用“.”来调用,自己的总结

// :(类名).(这个类中有的方法名)

// 这个类可以分开写到单独的文件,也可以

// 写在有main主函数调用的.java文件



public static void main(String[] args) 

throws Exception{

String printlnAllSql="select * from stu";

String updateSql

="update stu set uname=? where uid=?";

Object[] duiXiang={"诗书画唱",1};

// 想对某个对象进行操作的自己的总结:

// 声明一个Object[] 对象名={?的值,?的第某个位置数值};

// 之后用下面声明的增删改或查的方法,来执行下面的方法的内容


DBUtilsPrepareStatement.ZSGFangFa

(updateSql, duiXiang);



ResultSet res

=DBUtilsPrepareStatement

.selectFangFa(printlnAllSql);

System.out.println("打印所有stu表的内容:\n");

while(res.next()){

System.out.println(

"用户名:"+res.getObject(1)

+";用户编号:"+res.getObject(2));

}


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

// System.out.println(duiXiang[i]);

// }

}

// ————————————————————————————————————————————————————

// public static void bianLiFangFa(Object... o){

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

// System.out.println(o[i]);

// }

// }

// ————————————————————————————————

}

class DBUtilsPrepareStatement{

static String root,url,uname,pwd;

static Connection con=null;

static PreparedStatement ps=null;

static ResultSet res=null;

//常在静态代码块中读取配置文件

// static静态代码块就是优先执行的部分

static{

InputStream is=

DBUtilsPrepareStatement

.class.getResourceAsStream("./db.properties");

Properties p=new Properties();

try {

p.load(is);

root=p.getProperty("root");

url=p.getProperty("url");

uname=p.getProperty("uname");

pwd=p.getProperty("pwd");

//用Class.forName加载驱动,

// root为驱动的根(root)目录com.microsoft.sqlserver.jdbc.SQLServerDriver

Class.forName(root);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//个人理解:下面是加载数据库链接的方法 ,lianJieUrlUnamePwd

// 连接url,uname,pwd

// 就是用.getConnection

// 把这里root对应的

// com.microsoft.sqlserver.jdbc.SQLServerDriver

//

// 字符串,DriverManager和url,uname,pwd对应的字符串拼接或联系起来等

public static Connection lianJieUrlUnamePwd(){

if(con==null){

try {

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

} catch (SQLException e) {


e.printStackTrace();

}

}

return con;

}

//声明用上prepareStatement预处理的封装的查询方法

public static ResultSet 

selectFangFa(String sql,Object... o)

{

con=lianJieUrlUnamePwd();//拿到数据库链接

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 

ZSGFangFa(String sql,Object... o){

con=lianJieUrlUnamePwd();

boolean b=false;

try {

ps=con.prepareStatement(sql);

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

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

}

if(ps.executeUpdate()>0){

b=true;

}

// executeQuery():查询的时候用  ResultSet 

// executeUpdate():增删改的时候用  int >0成功

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return b;

}

}


root=com.microsoft.sqlserver.jdbc.SQLServerDriver

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

uname=qqq

pwd=123



I/O输入/输出(Input/Output),分为IO设备和IO接口两个部分。





package peiZhi;

import java.io.*;

import java.util.*;

public class pz {

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

//    input 英[ˈɪnpʊt]

//    美[ˈɪnpʊt]

//    v. 输入(信息);

//    stream 英[striːm]

//    美[striːm]

//    n.流; (液) 流; (气) 流; (人) 流; (车) 流;

//    InputStream:输入流

//    resource 英[rɪˈsɔːs]

//    美[ˈriːsɔːrs]

//    n. 资源

//    getResourceAsStream:得到资源作为(As)流

//    在Java中,能够读取一个字节序列的对象就称作一个输入流。

//    ————————————————

//    下面的neiRong就是被声明成输入流。

//    输入流是一种输入的格式,

//    所谓的“流”,意味着是顺序访问形式

//    (也就是相对于随机访问形式来说的)。

//    打开一个文件的时候,文件指针会按顺序读取里面的内容

//    ,就好像水顺次从水管中流出一样,

//    而这一个模型我们把它抽象为“输入流”。

    InputStream neiRong=pz.class.

    getResourceAsStream("./pz.properties");

//    properties 英[ˈprɒpətiz]

//    美[ˈprɑpərtiz]

//    n. 所有物; 特性;

   

//    Properties类表示一个持久的属性集,

//  Properties可以保存在流中或从流中加载,

//    属性列表中每一个键及其对应值都是一个字符串。


//    Properties集合是一个唯一和IO流相结合的集合

//

//    1.可以使用Properties集合中的方法store,

//    把集合中的临时数据,持久化写入到硬盘中存储

//

//    2.可以使用Properties集合中的load,

//    把硬盘中保存的文件(键值对),读取到集合中使用

//

//    属性列表中每一个键及其对应值都是一个字符串。

//

//    Properties集合是一个双列集合,key和value默认都是字符串


//property 英[ˈprɒpəti]

//美[ˈprɑːpərti]

//n. 财产; 


    //创建Properties集合对象,

//    使用Properties集合存储数据,

//    遍历取出Properties集合中的数据:

    Properties jiHe=new Properties();

        try{

//        load 英[ləʊd]

//        美[loʊd]

//       

//        v. 【(把大量…) 装上,装入; 

//        承载; 】装载; 【大量给予(尤指得携带的东西);】

//

        jiHe.load(neiRong);

//        把nerong装载到jiHe里,之后可以直接打印出来

        System.out.println("打印所有内容:"+jiHe);

//        使用getProperty方法通过key获取value

        System.out.println("打印name对应的值:"

+jiHe.getProperty("name"));

//        "name"为Properties文件中的key键,

//        name=XXX中的XXX为对应的value值

        }catch(IOException e){

        e.printStackTrace();

         }

    }


}





Java:IO流,增删改查,配置文件,预处理后的DBUtils,含个人详细总结【诗书画唱】的评论 (共 条)

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