java jdbc提供了一个连接mysql的接口,用于操作mysql数据库,连接mysql数据库需要在项目中导入mysql-connector-java-5.1.32.jar包,下面开始做一个jdbc操作数据库的案例。
1.首先在数据库中创建一个测试表,插入一条测试数据,如下。
CREATE TABLE comments ( id INT NOT NULL AUTO_INCREMENT, myuser VARCHAR(30) NOT NULL, email VARCHAR(30), weburl VARCHAR(100) NOT NULL, date DATE NOT NULL, summary VARCHAR(40) NOT NULL, comments VARCHAR(400) NOT NULL, PRIMARY KEY (ID) ); INSERT INTO comments values (defaultId, 'lars', 'myemail@gmail.com','http://www.vogella.com', '2017-05-06 10:33:11', '摘要','一条评论' );
2.创建一个JdbcDemo类,来操作mysql数据库,代码如下。
package com.baidu;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
public class JdbcDemo {
private Connection connect = null;
private Statement statement = null;
private PreparedStatement preparedStatement = null;
private ResultSet resultSet = null;
public void readDataBase() throws Exception {
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//创建数据库连接
connect = DriverManager.getConnection("jdbc:mysql://localhost/feedback?"+ "user=sqluser&password=sqlupw");
//创建statement对象用于操作数据库
statement = connect.createStatement();
//查询数据返回结果集
resultSet = statement.executeQuery("select * from comments");
//输出查询的数据
writeResultSet(resultSet);
//PreparedStatements对象用来做增加或修改数据比statement对象更安全有效,虽然作用一样
//前面创建表时id是自增长的,所以这里就给一个默认的表id如defaultId,起到占位符的作用,并不会真的插入到表中
preparedStatement = connect.prepareStatement("insert into comments values (defaultId, ?, ?, ?, ? , ?, ?)");
//第一个问号就是从1开始设置数据表字段
preparedStatement.setString(1, "zhangsan");
preparedStatement.setString(2, "TestEmail");
preparedStatement.setString(3, "Testweburl");
preparedStatement.setDate(4, (java.sql.Date) new Date());
preparedStatement.setString(5, "TestSummary");
preparedStatement.setString(6, "TestComment");
//执行插入语句
preparedStatement.executeUpdate();
//查询一条数据,只查询部分字段
preparedStatement = connect .prepareStatement("SELECT myuser, email from comments");
//执行查询语句
resultSet = preparedStatement.executeQuery();
writeResultSet(resultSet);
//删除一条叫zhangsan的数据
preparedStatement = connect
.prepareStatement("delete from comments where myuser= ?");
preparedStatement.setString(1, "zhangsan");
//执行删除语句
preparedStatement.executeUpdate();
resultSet = statement.executeQuery("select * from comments");
//输出结果集所在的表名和类名称
writeMetaData(resultSet);
} catch (Exception e) {
throw e;
} finally {
//操作完关闭
close();
}
}
private void writeMetaData(ResultSet resultSet) throws SQLException {
System.out.println("输出此结果所在的表: ");
System.out.println("Table: " + resultSet.getMetaData().getTableName(1));
for (int i = 1; i<= resultSet.getMetaData().getColumnCount(); i++){
//返回表字段名称
System.out.println("Column:"+i+" "+ resultSet.getMetaData().getColumnName(i));
}
}
private void writeResultSet(ResultSet resultSet) throws SQLException {
//遍历结果集并输出
while (resultSet.next()) {
String user = resultSet.getString("myuser");
String website = resultSet.getString("weburl");
String summary = resultSet.getString("summary");
Date date = resultSet.getDate("date");
String comment = resultSet.getString("comments");
System.out.println("User: " + user);
System.out.println("Website: " + website);
System.out.println("summary: " + summary);
System.out.println("Date: " + date);
System.out.println("Comment: " + comment);
}
}
// 关闭数据库连接
private void close() {
try {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connect != null) {
connect.close();
}
} catch (Exception e) {
}
}
}3.创建一个main方法来测试jdbc类。
package com.baidu;
public class JdbcTest {
public static void main(String[] args) throws Exception {
JdbcDemo dao = new JdbcDemo();
dao.readDataBase();
}
}