java jdbc init_Java之JDBC学习

本文详细介绍了Java使用JDBC进行数据库操作的基础知识,包括MySql数据类型、完整性约束、索引、DML操作、表间的连接类型。接着,通过实例展示了JDBC的初始化、建表、插入、查询操作,并对比了PreparedStatement和Statement的区别。此外,还探讨了事务的特性和使用Connection控制事务的方法。最后,讲解了如何利用c3p0数据库连接池进行优化,提供了两种不同的配置和使用方式。
摘要由CSDN通过智能技术生成

(一),MySql数据库

1,MySql数据库的数据类型定义

2816710a42eb726605daa4844e943840.png

2,完整性约束:

d1d915e80f36e70878d97f91c8a5bfde.png

3,索引:

作用:唯一作用就是加快对表查询速度,索引通过快速路径方法访问来快速定位数据,从而减少磁盘的II/O;

缺点:维护浪费开销,存储需要一定的磁盘空间

4,数据库操作语言:

1,insert into tableName(column1,...) values(value1,...);

2,update tableName set(column1=value1...) where condition;

3,delete from tableName where condition

5,表与表之间的左外链接,右外链接,全链接,内链接区别

左外链接:保留两表所有匹配成功的的记录,和左表未匹配成功的记录,其右对应项为null;

右外链接:保留两表所有匹配成功的的记录,和右表未匹配成功的记录,其左对应项为null;

全链接:保留两表所有的的记录,不管是否匹配上,没匹配上对应项为null;

内链接:只保留链表匹配成功的记录数;

6,系统属性:

8c629cf36288b7f066b839a2926ad55e.png

(二) JDBC操作

1,所需jar包,下载地址

2,简单的数据库JDBC操作:

importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.Properties;public classExecuteDO {privateString driver;privateString url;privateString user;privateString pswd;//初始参数

public void initParam(String paraFile) throwsFileNotFoundException, IOException{

Properties props=newProperties();

props.load(newFileInputStream(paraFile));

driver=props.getProperty("driver");

url=props.getProperty("url");

user=props.getProperty("user");

pswd=props.getProperty("pswd");

}//定义建表语言

public void createTable(String sql) throwsClassNotFoundException{

Class.forName(driver);//加载驱动

try{

Connection conn=DriverManager.getConnection(url,user,pswd);//获取数据库连接

PreparedStatement stmt=conn.prepareStatement(sql);//创建状态对象,Prepared效率高些

stmt.executeUpdate();//执行更新数据库,创建表

} catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}//插入表

public void insertTable(String sql) throwsClassNotFoundException{

Class.forName(driver);try{

Connection conn=DriverManager.getConnection(url,user,pswd);

PreparedStatement prst=conn.prepareStatement(sql);for(int i=0;i<5;i++){//循环插入5个值

prst.setString(1, "DD"+i);//设置第三列的数值,1代表第一个?

prst.executeUpdate();

}

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}//查询结果

public void queryTable(String sql) throwsClassNotFoundException{

Class.forName(driver);try{

Connection conn=DriverManager.getConnection(url,user,pswd);

PreparedStatement stat=conn.prepareStatement(sql);

ResultSet reset=stat.executeQuery();while(reset.next())

System.out.println(reset.getInt(1)+"\t"+reset.getString(2)+"\t"

+reset.getString(3));

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}public static void main(String[] args) throwsException, IOException{

ExecuteDO ed=newExecuteDO();//新建属性文件

Properties props=newProperties();

props.setProperty("url", "jdbc:mysql://localhost:3306/javatest");

props.setProperty("driver", "com.mysql.jdbc.Driver");

props.setProperty("user", "root");

props.setProperty("pswd", "123");

props.store(new FileOutputStream("mysql.ini"),"commen Lins");

ed.initParam("mysql.ini");//测试建表功能,DDL

ed.createTable("create table jdbc_test(jdbc_id int auto_increment primary key,"+"jdb_name varchar(255),jdbc_desc text);");//测试插入表结果:DML

ed.insertTable("Insert into jdbc_test(jdb_name,jdbc_desc) values('rr',?)");//测试查询表结果:DML功能

ed.queryTable("select * from jdbc_test");

System.out.println("ok!!");

}

}

PrepareStatement和Statement区别:

1,PrepareStatement可以提高代码的可读性

2,ParperStatement提高了代码的灵活性和执行效率。

3,ParperStatement安全性更强些。

(三)事务操作

1,事务的特点

53b123d1b895af55f072d30b1efc7df5.png

ad3ec688b208abdec6dcba9b75519489.png

2,Connection类控制事务有:setAutoCommit()//是否自动提交;commit()//提交事务 rollback():撤销事务;查看这里

(四)使用数据库连接池操作:

c3p0 jar包:优点时:可以自己清理不再使用的Connection,Statement,ResultSet 资源下载地址

第一种连接方式(纯代码):

importjava.beans.PropertyVetoException;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importcom.mchange.v2.c3p0.ComboPooledDataSource;public classCp3Test {private staticConnection conn;private static ComboPooledDataSource ds = newComboPooledDataSource();public staticConnection getConnection() {try{

ds.setDriverClass("com.mysql.jdbc.Driver");

ds.setJdbcUrl("jdbc:mysql://localhost:3306/javatest?useUnicode=true&characterEncoding=UTF8&useServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=256&rewriteBatchedStatements=true");

ds.setUser("root");

ds.setPassword("123");

conn=ds.getConnection();

}catch(SQLException e) {

e.printStackTrace();

}catch(PropertyVetoException e) {

e.printStackTrace();

}returnconn;

}public static voidmain(String[] args){try{

PreparedStatement pstmt=Cp3Test.getConnection().prepareStatement("select * from jdbc_test");

ResultSet rs=pstmt.executeQuery();while(rs.next()){

System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"

+rs.getString(3));

}

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

第二种方式:通过在src目录下建立名为"c3p0-config.xml”的xml文件

xml文件内容如下:

com.mysql.jdbc.Driver

root

123

3

10

2

10

调用方式如下:

importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importcom.mchange.v2.c3p0.ComboPooledDataSource;public classCp3Test {private staticConnection conn;private static ComboPooledDataSource ds = newComboPooledDataSource();public staticConnection getConnection() {try{

conn=ds.getConnection();

}catch(SQLException e) {

e.printStackTrace();

}returnconn;

}public static voidmain(String[] args){try{

PreparedStatement pstmt=Cp3Test.getConnection().prepareStatement("select * from jdbc_test");

ResultSet rs=pstmt.executeQuery();while(rs.next()){

System.out.println(rs.getInt(1)+"\t"+rs.getString(2)+"\t"

+rs.getString(3));

}

}catch(SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值