java jdbc in 操作_java基础 --jdbc操作数据库

ResultSet提供检索不同类型字段的方法,常用的有:

getString(int index)、getString(String columnName):获得在数据库里是varchar、char等类型的数据对象。

getFloat(int index)、getFloat(String columnName):获得在数据库里是Float类型的数据对象。

getDate(int index)、getDate(String columnName):获得在数据库里是Date类型的数据。

getBoolean(int index)、getBoolean(String columnName):获得在数据库里是Boolean类型的数据。

getObject(int index)、getObject(String columnName):获取在数据库里任意类型的数据。

ResultSet还提供了对结果集进行滚动的方法:

next():移动到下一行

Previous():移动到前一行

absolute(int row):移动到指定行

beforeFirst():移动resultSet的最前面。

afterLast() :移动到resultSet的最后面。

注意:在JDK1.4以前只支持next移动,且每次移动一个位置。到JDK1.5就可以随意定位。

4、使用JDBC的步骤

加载JDBC驱动程序 → 建立数据库连接Connection → 创建执行SQL的语句Statement → 处理执行结果ResultSet → 释放资源

2.建立连接

URL用于标识数据库的位置,通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:

jdbc:oracle:thin:@192.168.0.1:1521:SXT

0Jgby6gAAAABJRU5ErkJggg==

常见参数:

user                       用户名

password                  密码

autoReconnect                  联机失败,是否重新联机(true/false)

maxReconnect              尝试重新联机次数

initialTimeout               尝试重新联机间隔

maxRows                   传回最大行数

useUnicode                 是否使用Unicode字体编码(true/false)

characterEncoding          何种编码(GB2312/UTF-8/…)

relaxAutocommit            是否自动提交(true/false)

capitalizeTypeNames        数据定义的名称以大写表示

5、JDBC事务

1、 事务介绍

事务是一步或多步组成操作序列组成的逻辑执行单元,这个序列要么全部执行,要么则全部放弃执行。

事务的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(IsoIation)和持续性(Durability)

原子性(Atomicity):事务应用最小的执行单元,不可再分。是事务中不可再分的最小逻辑执行体。

一致性(Consistency):事务的执行结果,必须使数据库的从一个一致性的状态变到另一个一致性的状态。

隔离线(IsoIation):各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务,都是隔离的。也就是:并发执行的事务之间不能看到对方的中间状态,并发执行的事务之间不能互相影响。

持续性(Durability):持续性也称为持久性(Persistence),指事务一旦提交,对数据所做的任何改变,都要记录到永久存储器中,通常就是保存在物理数据库中。

通常数据库的事务涉及到的语句有:

一组DML(Data Munipulation Language,数据操作语言)语句,这组DML语句修改后数据将保持较好的一致性; 操作表的语句,如插入、修改、删除等;

一个DDL(Data Definition Language,数据定义语言)语句,操作数据对象的语言,有create、alter、drop。

一个DCL(Data Control Language,数据控制语言)语句,主要有grant、revoke语句。

DDL和DCL语句最多只能有一个,因为它们都会导致事务的立即提交。当事务所包含的全部数据库操作都成功执行后,应该提交事务,使这些修改永久生效。

事务提交有两种方式:显示提交和自动提交。显示提交:使用commit提交 自动提交:执行DLL或DCL,或者程序正常退出

当事务包含的任意一个数据库操作执行失败后,应该回滚(rollback)事务,使该事务中所作的修改全部失效。

事务的回滚方式有两种:显示回滚和自动回滚。显示回滚:使用rollback 自动回滚:系统错误或强行退出

6.代码区

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.dao;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;/*** 链接数据库工具类

*@authorAdministrator

**/

public classBaseDao {public static final String DRIVER="com.mysql.jdbc.Driver";public static final String URL="jdbc:mysql://127.0.0.1:3306/tb47";public static final String USER="root";public static final String PASSWORD="ok";public Connection conn=null;public CallableStatement cs=null; //该执行者调用存储过程

public ResultSet rs=null;static{try{

Class.forName(DRIVER);

}catch(ClassNotFoundException e) {

System.out.println("driver 有问题");

e.printStackTrace();

}

}publicConnection getConnection(){try{

conn=DriverManager.getConnection(URL, USER, PASSWORD);

}catch(SQLException e) {

System.out.println("URL, USER, PASSWORD 有问题");

e.printStackTrace();

}returnconn;

}public voidcloseAll(ResultSet rs, CallableStatement cs, Connection conn) {try{if(rs!=null){

rs.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(cs!=null){

cs.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(conn!=null){

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}

}

BaseDao  调用存储过程

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.dao;importjava.util.List;importcom.entity.Student;/***

*@authorAdministrator

**/

public interfaceStudentDao {/**、

* 查询所有

*@return

*/List findAll(); //没有参数存储过程

/**、

* 查询单条

*@paramsid

*@return

*/Student findById(int sid); //有输入参数存储过程

/*** 统计所有数据条数

*@return

*/

int totalCount(); //有输出参数的存储过程

/*** 统计某个年龄段的人数

*@paramage

*@return

*/

int totalCountAge(int age); //有输入参数和输出参数的存储过程

}

StudentDao

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.dao.impl;importjava.sql.SQLException;importjava.sql.Types;importjava.util.ArrayList;importjava.util.List;importcom.dao.BaseDao;importcom.dao.StudentDao;importcom.entity.Student;public class StudentDaoImpl extends BaseDao implementsStudentDao{/*** 1.查询所有:调用没有参数的存储过程*/@Overridepublic ListfindAll() {

List list=new ArrayList();try{//获取数据库链接

conn=super.getConnection();//定义调用存储过程的语句

String sql="{call proc_student_noparam()}";//创建调用存储过程的执行者并发送调用语句

cs=conn.prepareCall(sql);//执行者执行查询操作,返回n条用

rs=cs.executeQuery();while(rs.next()){

Student stu=new Student(rs.getInt("cid"), rs.getInt("sid"), rs.getString("sname"), rs.getString("password"), rs.getInt("age"), rs.getString("subject"), rs.getDouble("score"), rs.getString("examtime"));

list.add(stu);

}

}catch(SQLException e) {

e.printStackTrace();

}finally{this.closeAll(rs, cs, conn);

}returnlist;

}/*** 2.查询单条:调用输入参数存储过程*/@Overridepublic Student findById(intsid) {//定义对象

Student stu=null;//获取数据库连接

conn=super.getConnection();//定义调用存储过程的语句

String sql="{call proc_student_hasparam(?)}";try{//创建调用存储过程的执行者并发送调用语句

cs=conn.prepareCall(sql);//执行者给调用存储过程领命中的占位符赋值

cs.setInt(1, sid);//执行者执行查询操作:返回一条

rs=cs.executeQuery();if(rs.next()){

stu=new Student(rs.getInt("cid"), rs.getInt("sid"), rs.getString("sname"), rs.getString("password"), rs.getInt("age"), rs.getString("subject"), rs.getDouble("score"), rs.getString("examtime"));

}

}catch(SQLException e) {

e.printStackTrace();

}//返回对象

returnstu;

}/*** 3.统计总条数:调用带有输出参数存储过程*/@Overridepublic inttotalCount() {//定义

int count=0;//获取数据库连接

conn=super.getConnection();//定义调用存储过程命令

String sql="{ call proc_student_outparam(?)}";try{//创建调用存储过程的执行者并发送调用命令

cs=conn.prepareCall(sql);//执行者注册输出参数,并指定参数数据类型

cs.registerOutParameter(1, Types.INTEGER);//执行者执行存储过程操作

cs.execute();//执行者获取执行后得到的输出参数结果

count=cs.getInt(1);

}catch(SQLException e) {

e.printStackTrace();

}finally{//释放资源

super.closeAll(rs, cs, conn);

}//返回结果

returncount;

}/*** 4.统计大于某个年龄段的学生人数:

* 调用带有输入和输出参数的存储过程

* 输入和输出参数是两个或同一个的变量*/@Overridepublic int totalCountAge(intage) {//定义接受输出参数值变量

int count=0;//获取数据库链接

conn=super.getConnection();try{//方法1:输出输入是两个参数

/*//定义调用存储过程语句

String sql="{call proc_student_inoutparam(?,?)}";

//创建调用存储过程的执行者并发送调用命令

cs=conn.prepareCall(sql);

//为调用命令的占位符赋值

cs.setInt(1, age);

//注册输出参数

cs.registerOutParameter(2, Types.INTEGER);*/

//方法2:输入输出是同一个参数//定义调用存储过程语句

String sql="{call proc_student_inoutOneParam(?)}";//创建调用存储过程的执行者并发送调用命令

cs=conn.prepareCall(sql);//为调用命令的占位符赋值

cs.setInt(1, age);//注册输出参数

cs.registerOutParameter(1, Types.INTEGER);//执行调用存储过程操作

cs.execute();//获取存储过程输出参数结果

count=cs.getInt(1);

}catch(SQLException e) {

e.printStackTrace();

}finally{super.closeAll(rs, cs, conn);

}returncount;

}

}

StudentDaoImpl

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.part2;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;/*** 2.链接数据库的工具类

*@authorAdministrator

**/

public classBaseDao {//1.定义驱动

public static final String DRIVER = "com.mysql.jdbc.Driver";//2.定义url

public static final String URL = "jdbc:mysql://127.0.0.1:3306/tb50";//3.定义user、

public static final String USER = "root";//4.定义password

public static final String PASSWORD = "ok";//5.定义Connection通路

public static Connection conn = null;//6.定义执行者preparedStatement

public static PreparedStatement pstm = null;//7.定义结果集resultset

public static ResultSet rs = null;//8.static中加载驱动=建立mysql和java

static{try{

Class.forName(DRIVER);

}catch(ClassNotFoundException e) {

System.out.println("DRIVER 有问题");

e.printStackTrace();

}

}/*** 9.获取数据库连接

*@return

*/

publicConnection getConnection(){try{

conn=DriverManager.getConnection(URL, USER, PASSWORD);

}catch(SQLException e) {

e.printStackTrace();

System.out.println("URL, USER, PASSWORD 由问题");

}returnconn;

}/*** 10.增删改公共方法

*@paramsql

*@paramobj

*@return

*/

public intexecuteUpdate(String sql,Object[] param){int num=0;try{//10.1获取数据库链接

this.conn=this.getConnection();//10.2.创建执行者并发送sql命令

pstm=conn.prepareStatement(sql);//10.3 执行者循环给sql占位符赋值

if(param!=null){for (int i = 0; i < param.length; i++) {

pstm.setObject(i+1, param[i]);

}

}//10.4 .执行操作

num=pstm.executeUpdate();

}catch(SQLException e) {

e.printStackTrace();

}finally{//10.5 释放资源

this.closeAll(rs,pstm,conn);

}returnnum;

}/*** 12.查询的公共方法

*@paramsql

*@paramobj

*@return

*/

publicResultSet executeQuery(String sql,Object[] param){try{//10.1获取数据库链接

this.conn=this.getConnection();//10.2.创建执行者并发送sql命令

pstm=conn.prepareStatement(sql);//10.3 执行者循环给sql占位符赋值

if(param!=null){for (int i = 0; i < param.length; i++) {

pstm.setObject(i+1, param[i]);

}

}//10.4 .执行操作

rs=pstm.executeQuery();

}catch(SQLException e) {

e.printStackTrace();

}returnrs;

}/*** 11.释放资源

*@paramrs2

*@parampstm2

*@paramconn2*/

public voidcloseAll(ResultSet rs, PreparedStatement pstm,

Connection conn) {try{if (rs!=null) {

rs.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if (pstm!=null) {

pstm.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if (conn!=null) {

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}

}

BaseDao 深度封裝

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.part2;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;/*** 增删改查实现类

*@authorAdministrator

**/

public class StudentDaoImpl extends BaseDao implementsIStudentDao {/*** 1.查询所有*/@Overridepublic ListfindAll() {//1.1定义list集合,用来存放rs中的内容

List list=new ArrayList();//1.2定义sql

String sql="select * from student";//1.3调用basedao的查的方法、

super.rs=super.executeQuery(sql, null);try{//1.4 循环获取rs的内容并添加到list集合

while(rs.next()){//1.4.1 循环拿到一条赋值给student对象一个

/*Student stu=new Student();

stu.setAge(rs.getInt("age"));

stu.setCid(rs.getInt("cid"));

stu.setExamtime(rs.getString("examtime"));

stu.setPassword(rs.getString("password"));

stu.setScore(rs.getDouble("score"));

stu.setSid();

stu.setSname(rs.getString("sname"));

stu.setSubject(rs.getString("subject"));*/Student stu=new Student(rs.getInt("cid"), rs.getInt("sid"), rs.getString("sname"), rs.getString("password"), rs.getInt("age"), rs.getString("subject"), rs.getDouble("score"), rs.getString("examtime"));//1.4.2 向集合添加对象

list.add(stu);

}

}catch(SQLException e) {

e.printStackTrace();

}finally{//1.5 释放资源

super.closeAll(rs, pstm, conn);

}//返回集合

returnlist;

}/*** 2.根据id查询对象*/@Overridepublic Student findById(intsid) {

Student stu=null;

String sql="select * from student where sid=?";

Object[] param={sid};

rs=super.executeQuery(sql, param);try{if(rs.next()){

stu=new Student(rs.getInt("cid"), rs.getInt("sid"), rs.getString("sname"), rs.getString("password"), rs.getInt("age"), rs.getString("subject"), rs.getDouble("score"), rs.getString("examtime"));

}

}catch(SQLException e) {

e.printStackTrace();

}finally{super.closeAll(rs, pstm, conn);

}returnstu;

}/*** 添加*/@Overridepublic intsaveStu(Student stu) {

String sql="insert into student(sname,password," +

"age,subject,score,examtime,cid) " +

"values(?,?,?,?,?,?,?)";

Object[] param={stu.getSname(),stu.getPassword(),

stu.getAge(),stu.getSubject(),stu.getScore(),

stu.getExamtime(),stu.getCid()};return super.executeUpdate(sql, param);

}/*** 4.修改*/@Overridepublic intupdateStu(Student stu) {

String sql="update student set sname=?,password=?,age=?," +

"subject=?,score=?,examtime=?,cid=? where sid=?";

Object[] param={stu.getSname(),stu.getPassword(),

stu.getAge(),stu.getSubject(),stu.getScore(),

stu.getExamtime(),stu.getCid(),stu.getSid()};return super.executeUpdate(sql, param);

}/*** 5.删除*/@Overridepublic int deleteStuById(intsid) {

String sql="delete from student where sid=?";

Object[] param={sid};return super.executeUpdate(sql, param);

}

}

StudentDaoImpl 和上面一起

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.part2;importjava.sql.Date;/*** 1.实体类==封装的是数据库的字段

* 实体类的属性名一般情况和数据库的字段保持一一对应

*@authorAdministrator

**/

public classStudent {private int cid;//47

private intsid;privateString sname;privateString password;private intage;privateString subject;private doublescore;privateString examtime;publicStudent() {

}public Student(int cid, String sname, String password, intage,

String subject,doublescore, String examtime) {this.cid =cid;this.sname =sname;this.password =password;this.age =age;this.subject =subject;this.score =score;this.examtime =examtime;

}public Student(int cid, intsid, String sname, String password,int age, String subject, doublescore, String examtime) {this.cid =cid;this.sid =sid;this.sname =sname;this.password =password;this.age =age;this.subject =subject;this.score =score;this.examtime =examtime;

}public intgetCid() {returncid;

}public void setCid(intcid) {this.cid =cid;

}public intgetSid() {returnsid;

}public void setSid(intsid) {this.sid =sid;

}publicString getSname() {returnsname;

}public voidsetSname(String sname) {this.sname =sname;

}publicString getPassword() {returnpassword;

}public voidsetPassword(String password) {this.password =password;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}publicString getSubject() {returnsubject;

}public voidsetSubject(String subject) {this.subject =subject;

}public doublegetScore() {returnscore;

}public void setScore(doublescore) {this.score =score;

}publicString getExamtime() {returnexamtime;

}public voidsetExamtime(String examtime) {this.examtime =examtime;

}

@OverridepublicString toString() {return "Student [age=" + age + ", cid=" + cid + ", examtime="

+ examtime + ", password=" + password + ", score=" +score+ ", sid=" + sid + ", sname=" +sname+ ", subject=" + subject + "]";

}

}

Student

用PreparedStatement有占位符的jdbc操

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.zwj.jdbc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.sql.Statement;importjavax.swing.text.html.HTMLDocument.HTMLReader.PreAction;/*** 测试PreparedStatement的基本用法

*@author高淇 www.sxt.cn

**/

public classDemo03 {public static voidmain(String[] args) {

Connection conn= null;

PreparedStatement ps= null;try{//加载驱动类

Class.forName("com.mysql.jdbc.Driver");

conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");

String sql= "insert into t_user (username,pwd,regTime) values (?,?,?)"; //?占位符

ps =conn.prepareStatement(sql);//ps.setString(1, "高淇3");//参数索引是从1开始计算, 而不是0//ps.setString(2, "123456");//ps.setDate(3, new java.sql.Date(System.currentTimeMillis()));//可以使用setObject方法处理参数

ps.setObject(1, "高淇5");

ps.setObject(2, "234567");

ps.setObject(3, newjava.sql.Date(System.currentTimeMillis()));

System.out.println("插入一行记录");//ps.execute();

int count =ps.executeUpdate();

System.out.println(count);

}catch(ClassNotFoundException e) {

e.printStackTrace();

}catch(SQLException e) {

e.printStackTrace();

}finally{try{if(ps!=null){

ps.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(conn!=null){

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

Demo03 insert

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.zwj.jdbc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;/*** 测试ResultSet结果集的基本用法

*@author高淇 www.sxt.cn

**/

public classDemo04 {public static voidmain(String[] args) {

Connection conn= null;

PreparedStatement ps= null;

ResultSet rs= null;try{//加载驱动类

Class.forName("com.mysql.jdbc.Driver");

conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");

String sql= "select id,username,pwd from t_user where id>?"; //?占位符

ps =conn.prepareStatement(sql);

ps.setObject(1, 2); //把id大于2的记录都取出来

rs=ps.executeQuery();while(rs.next()){

System.out.println(rs.getInt(1)+"---"+rs.getString(2)+"---"+rs.getString(3));

}

}catch(ClassNotFoundException e) {

e.printStackTrace();

}catch(SQLException e) {

e.printStackTrace();

}finally{//遵循:resultset-->statment-->connection这样的关闭顺序!一定要将三个trycatch块,分开写!

try{if(rs!=null){

rs.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(ps!=null){

ps.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(conn!=null){

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

Demo04 select

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.zwj.jdbc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;/*** 测试批处理的基本用法

*@author高淇 www.sxt.cn

**/

public classDemo05 {public static voidmain(String[] args) {

Connection conn= null;

Statement stmt= null;

ResultSet rs= null;try{//加载驱动类

Class.forName("com.mysql.jdbc.Driver");

conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");

conn.setAutoCommit(false); //设为手动提交

long start =System.currentTimeMillis();

stmt=conn.createStatement();for(int i=0;i<20000;i++){

stmt.addBatch("insert into t_user (username,pwd,regTime) values ('gao"+i+"',666666,now())");

}

stmt.executeBatch();

conn.commit();//提交事务

long end =System.currentTimeMillis();

System.out.println("插入20000条数据,耗时(毫秒):"+(end-start));

}catch(ClassNotFoundException e) {

e.printStackTrace();

}catch(SQLException e) {

e.printStackTrace();

}finally{//遵循:resultset-->statment-->connection这样的关闭顺序!一定要将三个trycatch块,分开写!

try{if(rs!=null){

rs.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(stmt!=null){

stmt.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(conn!=null){

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

Demo05 batch20000

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.zwj.jdbc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;/*** 测试事务的基本概念和用法

*@author高淇 www.sxt.cn

**/

public classDemo06 {public static voidmain(String[] args) {

Connection conn= null;

PreparedStatement ps1= null;

PreparedStatement ps2= null;try{//加载驱动类

Class.forName("com.mysql.jdbc.Driver");

conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");

conn.setAutoCommit(false); //JDBC中默认是true,自动提交事务

ps1= conn.prepareStatement("insert into t_user (username,pwd) values (?,?)");

ps1.setObject(1, "高淇");

ps1.setObject(2, "123456");

ps1.execute();

System.out.println("插入一个用户,高淇");try{

Thread.sleep(6000);

}catch(InterruptedException e) {

e.printStackTrace();

}

ps2= conn.prepareStatement("insert into t_user (username,pwd) values (?,?,?)");

ps2.setObject(1, "马士兵");

ps2.setObject(2, "123456");

ps2.execute();

System.out.println("插入一个用户,马士兵");

conn.commit();

}catch(ClassNotFoundException e) {

e.printStackTrace();try{

conn.rollback();//回滚

} catch(SQLException e1) {

e1.printStackTrace();

}

}catch(SQLException e) {

e.printStackTrace();

}finally{try{if(ps1!=null){

ps1.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(conn!=null){

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

Demo06 事务

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.zwj.jdbc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.sql.Timestamp;importjava.util.Random;/*** 测试时间处理(java.sql.Date,Time,Timestamp)

*@author高淇 www.sxt.cn

**/

public classDemo07 {public static voidmain(String[] args) {

Connection conn= null;

PreparedStatement ps= null;try{//加载驱动类

Class.forName("com.mysql.jdbc.Driver");

conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");for(int i=0;i<1000;i++){

ps= conn.prepareStatement("insert into t_user (username,pwd,regTime,lastLoginTime) values (?,?,?,?)");

ps.setObject(1, "高淇"+i);

ps.setObject(2, "123456");int rand = 100000000+new Random().nextInt(1000000000);

java.sql.Date date= new java.sql.Date(System.currentTimeMillis()-rand);

Timestamp stamp= new Timestamp(System.currentTimeMillis()-rand); //如果需要插入指定日期,可以使用Calendar、DateFormat

ps.setDate(3, date);

ps.setTimestamp(4, stamp);

ps.execute();

}

System.out.println("插入一个用户,高淇");

}catch(ClassNotFoundException e) {

e.printStackTrace();

}catch(SQLException e) {

e.printStackTrace();

}finally{try{if(ps!=null){

ps.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(conn!=null){

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

Demo07 测试时间处理

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.zwj.jdbc;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.sql.Timestamp;importjava.text.DateFormat;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Random;/*** 测试时间处理(java.sql.Date,Time,Timestamp),取出指定时间段的数据

*@author高淇 www.sxt.cn

**/

public classDemo08 {/*** 将字符串代表的日期转为long数字(格式:yyyy-MM-dd hh:mm:ss)

*@paramdateStr

*@return

*/

public static longstr2Date(String dateStr){

DateFormat format= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");try{returnformat.parse(dateStr).getTime();

}catch(ParseException e) {

e.printStackTrace();return 0;

}

}public static voidmain(String[] args) {

Connection conn= null;

PreparedStatement ps= null;

ResultSet rs= null;try{//加载驱动类

Class.forName("com.mysql.jdbc.Driver");

conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");//ps = conn.prepareStatement("select * from t_user where regTime>? and regTime");//java.sql.Date start = new java.sql.Date(str2Date("2015-4-10 10:23:45"));//java.sql.Date end = new java.sql.Date(str2Date("2015-4-13 10:23:45"));//ps.setObject(1, start);//ps.setObject(2, end);

ps= conn.prepareStatement("select * from t_user where lastLoginTime>? and lastLoginTime order by lastLoginTime ");

Timestamp start= new Timestamp(str2Date("2015-4-18 8:10:20"));

Timestamp end= new Timestamp(str2Date("2015-4-18 9:9:10"));

ps.setObject(1, start);

ps.setObject(2, end);

rs=ps.executeQuery();while(rs.next()){

System.out.println(rs.getInt("id")+"--"+rs.getString("username")+"--"+rs.getTimestamp("lastLoginTime"));

}

}catch(ClassNotFoundException e) {

e.printStackTrace();

}catch(SQLException e) {

e.printStackTrace();

}finally{try{if(ps!=null){

ps.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(conn!=null){

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

Demo08 取出指定时间段的数据

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.zwj.jdbc;importjava.io.Reader;importjava.sql.Clob;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;/*** 测试CLOB 文本大对象的使用

* 包含:将字符串、文件内容插入数据库中的CLOB字段、将CLOB字段值取出来的操作。

*@author高淇 www.sxt.cn

**/

public classDemo09 {public static voidmain(String[] args) {

Connection conn= null;

PreparedStatement ps= null;

ResultSet rs= null;

Reader r= null;try{//加载驱动类

Class.forName("com.mysql.jdbc.Driver");

conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");//ps = conn.prepareStatement("insert into t_user (username,myInfo) values (?,?) ");//ps.setString(1, "高淇");//ps.setClob(2, new FileReader(new File("d:/a.txt")));//将文本文件内容直接输入到数据库中//将程序中的字符串输入到数据库的CLOB字段中//ps.setClob(2, new BufferedReader(new InputStreamReader(new ByteArrayInputStream("aaaabbbbbb".getBytes()))));

ps= conn.prepareStatement("select * from t_user where id=?");

ps.setObject(1, 101024);

rs=ps.executeQuery();while(rs.next()){

Clob c= rs.getClob("myInfo");

r=c.getCharacterStream();int temp = 0;while((temp=r.read())!=-1){

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

}

}

}catch(ClassNotFoundException e) {

e.printStackTrace();

}catch(Exception e) {

e.printStackTrace();

}finally{try{if(r!=null){

r.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if(ps!=null){

ps.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(conn!=null){

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

Demo09 CLOB 文本大对象的使用

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.zwj.jdbc;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importjava.sql.Blob;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;/*** 测试BLOB 二进制大对象的使用

*@author高淇 www.sxt.cn

**/

public classDemo10 {public static voidmain(String[] args) {

Connection conn= null;

PreparedStatement ps= null;

ResultSet rs= null;

InputStream is= null;

OutputStream os= null;try{//加载驱动类

Class.forName("com.mysql.jdbc.Driver");

conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc","root","123456");//ps = conn.prepareStatement("insert into t_user (username,headImg) values (?,?) ");//ps.setString(1, "高淇");//ps.setBlob(2, new FileInputStream("d:/icon.jpg"));//ps.execute();

ps= conn.prepareStatement("select * from t_user where id=?");

ps.setObject(1, 101026);

rs=ps.executeQuery();while(rs.next()){

Blob b= rs.getBlob("headImg");

is=b.getBinaryStream();

os= new FileOutputStream("d:/a.jpg");int temp = 0;while((temp=is.read())!=-1){

os.write(temp);

}

}

}catch(ClassNotFoundException e) {

e.printStackTrace();

}catch(Exception e) {

e.printStackTrace();

}finally{try{if(is!=null){

is.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if(os!=null){

os.close();

}

}catch(Exception e) {

e.printStackTrace();

}try{if(ps!=null){

ps.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(conn!=null){

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

Demo10 BLOB 二进制大对象的使用

简单封装、资源文件properties处理连接信息

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.bjsxt.testorm;importjava.io.IOException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.Properties;public classJDBCUtil {static Properties pros = null; //可以帮助读取和处理资源文件中的信息

static { //加载JDBCUtil类的时候调用

pros = newProperties();try{

pros.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));

}catch(IOException e) {

e.printStackTrace();

}

}public staticConnection getMysqlConn(){try{

Class.forName(pros.getProperty("mysqlDriver"));return DriverManager.getConnection(pros.getProperty("mysqlURL"),

pros.getProperty("mysqlUser"),pros.getProperty("mysqlPwd"));

}catch(Exception e) {

e.printStackTrace();return null;

}

}public staticConnection getOracleConn(){try{

Class.forName(pros.getProperty("oracleDriver"));return DriverManager.getConnection(pros.getProperty("oracleURL"),

pros.getProperty("oracleUser"),pros.getProperty("oraclePwd"));

}catch(Exception e) {

e.printStackTrace();return null;

}

}public static voidclose(ResultSet rs,Statement ps,Connection conn){try{if(rs!=null){

rs.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(ps!=null){

ps.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(conn!=null){

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}public static voidclose(Statement ps,Connection conn){try{if(ps!=null){

ps.close();

}

}catch(SQLException e) {

e.printStackTrace();

}try{if(conn!=null){

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}public static voidclose(Connection conn){try{if(conn!=null){

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}

}

JDBCUtil

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 #右击该properties文件--properties--Resource--Text file encoding,选中other,选择其它编码方式。2 #如UTF-8或GBK,这样就能在properties里面输入中文,而不会自动转成Unicode了。3

4#java中的properties文件是一种配置文件,主要用于表达配置信息。5 #文件类型为*.properties,格式为文本文件,文件内容是"键=值"的格式。6 #在properties文件中,可以用"#"来作注释7

8#MySQL连接配置9 mysqlDriver=com.mysql.jdbc.Driver10 mysqlURL=jdbc:mysql://localhost:3306/testjdbc

11 mysqlUser=root12 mysqlPwd=mysql13

14#Oracle连接配置15 #...

jdbc.properties

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.test.jdbc;2

3 importjava.sql.Connection;4 importjava.sql.PreparedStatement;5 importjava.sql.ResultSet;6

7 /**8 * 测试使用JDBCUtil工具类来简化JDBC开发

9*/

10 public classDemo11 {11 public static voidmain(String[] args) {12 Connection conn = null;13 PreparedStatement ps = null;14 ResultSet rs = null;15

16 try{17 conn =JDBCUtil.getMysqlConn();18

19 ps = conn.prepareStatement("insert into t_user (userName) values (?)");20 ps.setString(1, "小高高");21ps.execute();22

23 } catch(Exception e) {24e.printStackTrace();25 } finally{26JDBCUtil.close(rs, ps, conn);27}28}29 }

Demo11

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值