[note] java与DB
2015-06-05 23:54
399 查看
JDBC制定了统一的访问各类关系数据库的标准接口。JDBC API是面向对象的。常用的类和接口均在java.sql.*包中
1. 连接MySQL
>>> 到http://maven.apache.org/下载包: mysql-connector-java-%version%.jar 并添加到java project中的build path中去即可使用此包
//把 mysql-connector-java-%version%-sources.jar 包添加到source attachment 中则可查看该包的源码
//1. 加载JDBC驱动
Class.forName("com.mysql.jdbc.Driver");
// 2. 建立连接
//mysql默认端口为3306,localhost可以换为IP,如果是连接其他数据库就可以改为 jdbc:sqlserver://... 等
String url="jdbc:mysql://localhost:3307/databaseName";
String user="username"; //登录该DB的用户名密码
String psw="psw";
Connection con=DriverManager.getConnection(url,user,psw);
//3. 执行SQL语句使用Statement接口或者PreparedStatement接口
String sql="insert into table1 values ('andy','music')";
Statement statement=con.createStatement();
statement.executeUpdate(sql);
//关闭连接
conn.close;
2. 执行静态SQL语句使用Statement
>>> String sql="insert into table1 values ('andy','music')";
Statement statement=con.createStatement();
statement.executeUpdate(sql);
3. 执行动态SQL语句使用PreparedStatement
>>> String sql="insert into table1 values (?,?')";
PreparedStatement ps=con.preparedStatement(sql);
ps.setInt(1,10);//paramIndex, value
ps.setString(2,'lucas');
ps.executeUpdate();
4. 获得查询结果集使用ResultSet
>>> String sql="select * from table1";
Statement statement=con.createStatement();
ResultSet set= statement.executeQuery(sql);
while(set.next()){
int id=set.get("id");
int name=set.get("name");}
PS: set.get(int columnIndex) or set.get(String columnName)都可以取出对应结果集中对应行列的值
5. 使用Statement执行sql语句
>>> insert,delete,update语句都可以用statement.executeUpdate(sql);
int affectedCount=statement.executeUpdate("update table1 set name='june' where id=1");
int affectedCount=statement.executeUpdate("delete from table1 where id=1");
int affectedCount=statement.executeUpdate("insert into table1 values ('3','lucy')");
>>> select语句可以用execute(sql),可以返回多个ResultSet
ResultSet set=statement.execute("select * from table1");
>>>任意sql语句可以用executeQuery(sql),返回一个ResultSet
6. 使用PreparedStatement执行sql语句
>>>insert,update,delete语句也可以用executeUpdate();
eg: String sql="update table1 set name='june' where id=?";
PareparedStatement ps=conn.preparedStatement(sql);
ps.setInt(1,1);
ps.executeUpdate();
>>> select语句可以用executeQuery(),可以返回ResultSet
>>> 注意sql中的?不能用来指定表名。否则执行ps.execute();会报错
eg: String sql="select * from table1 where name=?";
PareparedStatement ps=conn.preparedStatement(sql);
ps.setString(1,"jack");
ResultSet set= ps.executeQuery();
>>>任意sql语句可以用execute()
7. 连接DB时避免乱码:
>>> String url="jdbc:mysql://localhost:3306/databaseName?characterEncoding=utf8";
Connection con=DriveManager.getConnection(url,username,psw);
8. 一般为数据库连接单独做一个类并定义一个连接的静态方法,需要使用时直接调用即可以避免代码重复资源浪费等问题
9. 关于Statement和PreparedStatement的区别
一般executeUpdate() 函数用来执行insert,delete,update或没有返回的DDL语句,executeQuery()用来执行select语句,并且返回ResultSet类型;
>>>Statement需要把sql语句放到函数中执行,如
Statement statement=con.createStatement();然后执行 execute(sql), executeUpdate(sql), executeQuery(sql); //需要设参
>>>PreparedStatement需要一开始就初始化sql,然后执行函数
PreparedStatement ps=con.preparedStatement(sql); ps.setInt(1,1); etc.. 然后执行 execute(), executeUpdate(), executeQuery(); // 不需要设参了
10. 获取表结构用ResultSetMetaData
>>> ResultSet set=statement.executeUpdate(sql);
ResultSetMetaData metadata = set.getMetaData();
>>>metadata.getColumnCount(); //获取表的columns数量
metadata.getColumnName(int columnIndex); //获取某一个column的名字,index从1开始
metadata.getColumnTypeName(int columnIndex); //获取某一个column的类型名称,index从1开始
1. 连接MySQL
>>> 到http://maven.apache.org/下载包: mysql-connector-java-%version%.jar 并添加到java project中的build path中去即可使用此包
//把 mysql-connector-java-%version%-sources.jar 包添加到source attachment 中则可查看该包的源码
//1. 加载JDBC驱动
Class.forName("com.mysql.jdbc.Driver");
// 2. 建立连接
//mysql默认端口为3306,localhost可以换为IP,如果是连接其他数据库就可以改为 jdbc:sqlserver://... 等
String url="jdbc:mysql://localhost:3307/databaseName";
String user="username"; //登录该DB的用户名密码
String psw="psw";
Connection con=DriverManager.getConnection(url,user,psw);
//3. 执行SQL语句使用Statement接口或者PreparedStatement接口
String sql="insert into table1 values ('andy','music')";
Statement statement=con.createStatement();
statement.executeUpdate(sql);
//关闭连接
conn.close;
2. 执行静态SQL语句使用Statement
>>> String sql="insert into table1 values ('andy','music')";
Statement statement=con.createStatement();
statement.executeUpdate(sql);
3. 执行动态SQL语句使用PreparedStatement
>>> String sql="insert into table1 values (?,?')";
PreparedStatement ps=con.preparedStatement(sql);
ps.setInt(1,10);//paramIndex, value
ps.setString(2,'lucas');
ps.executeUpdate();
4. 获得查询结果集使用ResultSet
>>> String sql="select * from table1";
Statement statement=con.createStatement();
ResultSet set= statement.executeQuery(sql);
while(set.next()){
int id=set.get("id");
int name=set.get("name");}
PS: set.get(int columnIndex) or set.get(String columnName)都可以取出对应结果集中对应行列的值
5. 使用Statement执行sql语句
>>> insert,delete,update语句都可以用statement.executeUpdate(sql);
int affectedCount=statement.executeUpdate("update table1 set name='june' where id=1");
int affectedCount=statement.executeUpdate("delete from table1 where id=1");
int affectedCount=statement.executeUpdate("insert into table1 values ('3','lucy')");
>>> select语句可以用execute(sql),可以返回多个ResultSet
ResultSet set=statement.execute("select * from table1");
>>>任意sql语句可以用executeQuery(sql),返回一个ResultSet
6. 使用PreparedStatement执行sql语句
>>>insert,update,delete语句也可以用executeUpdate();
eg: String sql="update table1 set name='june' where id=?";
PareparedStatement ps=conn.preparedStatement(sql);
ps.setInt(1,1);
ps.executeUpdate();
>>> select语句可以用executeQuery(),可以返回ResultSet
>>> 注意sql中的?不能用来指定表名。否则执行ps.execute();会报错
eg: String sql="select * from table1 where name=?";
PareparedStatement ps=conn.preparedStatement(sql);
ps.setString(1,"jack");
ResultSet set= ps.executeQuery();
>>>任意sql语句可以用execute()
7. 连接DB时避免乱码:
>>> String url="jdbc:mysql://localhost:3306/databaseName?characterEncoding=utf8";
Connection con=DriveManager.getConnection(url,username,psw);
8. 一般为数据库连接单独做一个类并定义一个连接的静态方法,需要使用时直接调用即可以避免代码重复资源浪费等问题
9. 关于Statement和PreparedStatement的区别
一般executeUpdate() 函数用来执行insert,delete,update或没有返回的DDL语句,executeQuery()用来执行select语句,并且返回ResultSet类型;
>>>Statement需要把sql语句放到函数中执行,如
Statement statement=con.createStatement();然后执行 execute(sql), executeUpdate(sql), executeQuery(sql); //需要设参
>>>PreparedStatement需要一开始就初始化sql,然后执行函数
PreparedStatement ps=con.preparedStatement(sql); ps.setInt(1,1); etc.. 然后执行 execute(), executeUpdate(), executeQuery(); // 不需要设参了
10. 获取表结构用ResultSetMetaData
>>> ResultSet set=statement.executeUpdate(sql);
ResultSetMetaData metadata = set.getMetaData();
>>>metadata.getColumnCount(); //获取表的columns数量
metadata.getColumnName(int columnIndex); //获取某一个column的名字,index从1开始
metadata.getColumnTypeName(int columnIndex); //获取某一个column的类型名称,index从1开始
相关文章推荐
- Java for LeetCode 168 Excel Sheet Column Title
- Java学习篇之---LinkedList
- Java for LeetCode 166 Fraction to Recurring Decimal
- java.lang.IllegalArgumentException: Illegal character in scheme at index 0
- java相关知识介绍
- 史上最全最强SpringMVC详细示例实战教程
- Spring4 Jar包详解
- 迭代器(Iterator)的java.util.NoSuchElementException错误的改正
- Java学习篇之---Collection接口
- 一个Java编写的小玩意儿---多人在线聊天工具
- JAVA 大数在acm中的应用
- JAVA回炉笔记——不定期更新
- 【eclipse】【插件】myeclipse10 离线安装aptana插件
- How to programmatically new a java class which implements sepecified interface in eclipse plugin development
- java 递归学习
- java学习笔记(二)
- MyEclipse反编译Class文件
- java流
- java线程学习(二)—并发编程实践学习笔记
- Java服务端限制下载速度