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

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

2285053c82d6fc286d19bea5ac048ffc.png

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

bc1fec62bfd8b16656fbdc4955aa6eca.png

7c88f2c78583c8f62267980810484cb8.png

bc2d1fb724fc3a36daeb69edb7867fb9.png

f4106eeea21f3a3bde600fc4b2b3a7e4.png

6edc312038c8ffe8329cf93df1e6c82e.png

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));

}

}

}

3b830fdf96a4bb4d873811da4e223aa6.png

e2b6a520e417ff6b2695b099d0dbddcf.png

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

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

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;

}

}d64ec43c217d7457f46e6b17cd692188.png

4902fa3bbeb48563073a88702f15153e.png

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

uname=qqq

pwd=123

root=com.microsoft.sqlserver.jdbc.SQLServerDriver

42ce1e5a5b241a3ccbca2a3c2e830a17.png

df0dae08e1dc5d84de9cf49f5d8ec130.png

DBUtils中nain主函数中使用方法:8638e68016161034ed64a287ab2a7bac.png

118d96689fa8a3a19fd9e8341d2dbdfc.png

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

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

//}

}

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

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

//for(int i=0;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

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

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;

}

}

dd62359cc0ccfdaa1500ede3909ac444.png

f5a370c5f92b4d63b3de81544c88dffb.png

root=com.microsoft.sqlserver.jdbc.SQLServerDriver

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

uname=qqq

pwd=123e6a05c9647db67a7d88a4e066f785143.png

69a672e28b4ab955b235c65ba01dc3e3.png

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

f3f7b4021bd6c172c9353231148d2125.png

153639cf5dedce3665b532d69cbea91d.png

04147e8463bb65580163efe3e3c32037.png

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();

}

}

}

ec5d0584d9e35640361e2259aafc9ba5.png

ca2b7ee0fcb275782e24032fd70be58c.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值