JDBC使用
以下代码均未捕获异常
一、JDBC处理SQL语句
1)Statment:执行完整SQL命令
拼接麻烦,可读性差(建议在只使用一次的情况下使用,也可以通过字符串的合并来实现PreparedStatment的操作,但是其没有预编译的过程,所以多次使用这个方法,时间效率较低)
Connection conn = null;
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//建立连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF8","root","password");
//发送SQL语句
Statement st = conn.createStatement();
int result=st.executeUpdate("INSERT INTO admin VALUES ('A2A','BBBBBB')");
2)PreparedStatment:执行带参数的SQL 命令
安全性高,可读性好,预编译(多次使用时会直接使用编译好的SQL语句),性能更好,可预防SQL注入的情况。
Connection conn
= null
;
Class
.forName("com.mysql.jdbc.Driver");
conn
= DriverManager
.getConnection("jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF8","root","password");
PreparedStatement pre
= conn
.prepareStatement("select * from admin where name = ? and password = ?");
pre
.setString(1,"name");
pre
.setString(2,"password");
ResultSet rs
= pre
.executeQuery();
Admin admin
= null
;
while(rs
.next()){
admin
= new Admin();
admin
.setName(rs
.getString("name"));
admin
.setName(rs
.getString("password"));
}
pre
.close();
rs
.close();
conn
.close();
二、实现增删改
Connection conn
= null
;
Class
.forName("com.mysql.jdbc.Driver");
conn
= DriverManager
.getConnection("jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF8","root","password");
Statement st
= conn
.createStatement();
/返回
1则代表数据库操作成功
int result
=st
.executeUpdate("INSERT INTO admin VALUES ('A2A','BBBBBB')");
st
.close();
conn
.close();
三、实现查(用ResultSet获取结果集)
Connection conn
= null
;
Class
.forName("com.mysql.jdbc.Driver");
conn
= DriverManager
.getConnection("jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF8","root","password");
Statement st
= conn
.createStatement();
ResultSet rs
= stat
.executeQuery("select * from admin");
List
<Admin> admins
= new ArrayList<>();
while (rs
.next()){
String name
= rs
.getString("name");
String passowrd
= rs
.getString("password");
Admin admin
= Admin(name
,password
);
admins
.add(admin
);
}
st
.close();
rs
.close();
conn
.close();
四、JDBC资源释放
//全关,释放资源,可放在finally{}里面
st.close();
rs.close();
conn.close();
五、JDBC小结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJUlToWR-1570172241634)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1558849968963.png)]
C3P0连接池配置
//在src,java类的主目录下,新建一个c3p0-config.xml
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver
</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/tangxz
</property>
<property name="user">root
</property>
<property name="password">5516
</property>
<property name="checkoutTimeout">30000
</property>
<property name="idleConnectionTestPeriod">30
</property>
<property name="initialPoolSize">10
</property>
<property name="maxIdleTime">30
</property>
<property name="maxPoolSize">100
</property>
<property name="minPoolSize">10
</property>
<property name="maxStatements">200
</property>
</default-config>
<named-config name="c3p0">
<property name="driverClass">com.mysql.jdbc.Driver
</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/tangxz
</property>
<property name="useSSL">false
</property>
<property name="user">root
</property>
<property name="password">5516
</property>
<property name="acquireIncrement">5
</property>
<property name="initialPoolSize">20
</property>
<property name="minPoolSize">10
</property>
<property name="maxPoolSize">40
</property>
<property name="maxStatements">20
</property>
<property name="maxStatementsPerConnection">5
</property>
</named-config>
</c3p0-config>
static ComboPooledDataSource ds
= new ComboPooledDataSource();
public static Connection
getConnection() throws SQLException
{
return ds
.getConnection();
}
DBUtils使用c3p0
一、DBUtils下载地址:
http://commons.apache.org/proper/commons-dbutils/download_dbutils.cgi
二、DBUtils简介
1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作;
2.对于数据表的写操作,也变得很简单(只需写sql语句)
主要方法:
DbUtils类:启动类
ResultSetHandler接口:转换类型接口
MapListHandler类:实现类,把记录转化成List
BeanListHandler类:实现类,把记录转化成List,使记录为JavaBean类型的对象
Query Runner类:执行SQL语句的类
三、实现DBUtils的QreryRunner类:
QueryRunner qr
= new QueryRunner(C3p0Utils
.getDataSource());
QreryRunner类(org.apache.commons.dbutils.QueryRunner) 是Dbutils的核心类之一,它显著的简化了SQL查询,并与ResultSetHandler协同工作将使编码量大为减少。它包含以下几个方法:
query(Connection conn, String sql, Object[] params, ResultSetHandler rsh):执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。query(String sql, Object[] params, ResultSetHandler rsh):方法本身不提供数据库连接,执行选择查询,在查询中,对象阵列的值被用来作为查询的置换参数。query(Connection conn, String sql, ResultSetHandler rsh):执行无需参数的选择查询。update(Connection conn, String sql, Object[] params):被用来执行插入、更新或删除(DML)操作。
四、增删改查的实现
1、增
public void insert() throws SQLException
{
String sql
= "insert into admin(name,password) values(?,?)";
String name
= "aaaa";
String password
= "zzzz";
qr
.update(sql
, name
, password
);
}
2、删
public void delById(String name
) throws SQLException
{
String sql
= "delete from users where name = ?";
qr
.update(sql
, name
);
}
3、改
public void update(String name
, user user
) throws SQLException
{
String sql
= "update users set name=? , password=? where name=?";
qr
.update(sql
,user
.getName(),user
.getPassword(),name
);
}
4、查
public user
findById(String name
) throws SQLException
{
String sql
= "select * from admin where name = ?";
return qr
.query(sql
, new BeanHandler<>(user
.class),name
);
}
public List
<user> findAll() throws SQLException
{
String sql
= "select * from users";
List
<user> user
= qr
.query(sql
, new BeanListHandler<user>(user
.class));
return user
;
}