在JDBC中使用SQL几个固定的步骤:
(1)加载驱动,Class.forName(driverClass)每个数据库的驱动都有所不同,例如:MySQL的driverClass是com.mysql.jdbc.Driver。并且需要将mysql-connector-java.jar文件加载到项目中。
(2)获取数据库连接。DriverManager.getConnection(String url,String user,String pass)
三个参数分别为:数据库url,用户名,密码。其中的url每个数据库也有其固定格式。例如:MySQL的url:jdbc:mysql://hostname:port/databasename 。用户名默认为root,密码是自己设置的。我的是qh911119.
(3)为了能够执行SQL语句,必须产生一个Statement对象。
(4)Statement对象能够通过一下三种方法执行SQL语句:executeQuery(),executeUpdate(),execute()
下面对三种方法做个介绍:
ResultSet executeQuery(String sql):该方法用于查询语句,把查询的结果放在ResultSet的对象中,ResultSet有许多处理数据的方法。
int executeUpdate(String sql):该方法用于执行DML语言(insert,update,delete),返回影响的行数,也可执行DDL(create,drop,alter,truncate),返回0
boolean execute(String sql):可以执行任何SQL语句。如果执行的后产生的第一个结果为ResultSet对象,则返回true;否则返回false.
(5)下面是一个简单的程序,包括了上面的三种方法的使用。程序中getConnection()中的参数是采用配置文件写到程序中的,这样更具有灵活性。
配置文件:mysql.ini
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test1
user=root
pass=qh911119
executeDDL.java
import java.util.Properties;
import java.io.FileInputStream;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
public class ExecuteDLL
{
private String driver;
private String url;
private String user;
private String pass;
private Connection conn;
private Statement stmt;
private ResultSet rs;
public void initParam(String paramFile) throws Exception{
Properties props=new Properties();
props.load(new FileInputStream(paramFile));
driver=props.getProperty("driver");
url=props.getProperty("url");
user=props.getProperty("user");
pass=props.getProperty("pass");
}
public void createTable(String sql) throws Exception{
try{
Class.forName(driver);
conn=DriverManager.getConnection(url,user,pass);
stmt=conn.createStatement();
stmt.executeUpdate(sql);
}
finally{
if(stmt!=null){stmt.close();}
if(conn!=null){conn.close();}
}
}
public int insertData(String sql) throws Exception{
try{
Class.forName(driver);
conn=DriverManager.getConnection(url,user,pass);
stmt=conn.createStatement();
return stmt.executeUpdate(sql);
}
finally{
if(stmt!=null){stmt.close();}
if(conn!=null){conn.close();}
}
}
<pre class="java" name="code"> public void executeSql(String sql) throws Exception{
try{
Class.forName(driver);
conn=DriverManager.getConnection(url,user,pass);
stmt=conn.createStatement();
boolean hasResultSet=stmt.execute(sql);
//执行后有ResultSet结果集
if(hasResultSet){
//获取结果集
rs=stmt.getResultSet();
//ResultSetMetaData是用于分析结果集的数据接口
ResultSetMetaData rsmd=rs.getMetaData();
int columnCount=rsmd.getColumnCount();
while(rs.next()){
for(int i=0;i<columnCount;i++){
System.out.print(rs.getString(i+1)+"\t");
}
System.out.println();
}
}
else{
System.out.println("该SQL语句影响的记录有"+stmt.getUpdateCount());
}
}
finally{
if(rs!=null){rs.close();}
if(stmt!=null){stmt.close();}
if(conn!=null){conn.close();}
}
}
public static void main(String[] args) throws Exception
{
ExecuteDLL ed=new ExecuteDLL();
ed.initParam("mysql.ini");
//SQL语句,在test1数据库中新建一个名为jdbc_test的表
// ed.createTable("create table jdbc_test"+
//"(jdbc_id int auto_increment primary key,"+
// "jdbc_name varchar(255),"+"jdbc_desc text);");
//插入记录
// int result=ed.insertData("insert into jdbc_test(jdbc_name)"+
// "select s.student_name from student_table s,teacher_table t "+
// "where s.student_id=t.java_teacher;");
System.out.println("delete tables");
ed.executeSql("drop table if exists my_test");
System.out.println("create tables");
ed.executeSql("create table my_test"+
"(test_id int auto_increment primary key,"+
"test_name varchar(255))");
System.out.println("insert dat a");
//select 和from语句之间不能用+,
//例如"select s.student_name"+"from student_table s"将引发一个错误
ed.executeSql("insert into my_test(test_name)"+
"select s.student_name from student_table s;");
System.out.println("get data");
ed.executeSql("select*from my_test");
}
}