领导叫我写一些JDBC的测试代码,由于没有搞过JAVA,所以临时参阅了一下ORACLE的文档<<2 Day + Java Developer's Guide >>.
测试的目的就是写一个java的class,通过JDBC连接oracle数据库,实现数据的查询,新增和更新等基本的数据库操作(DML).数据库我连接的是ORACLE的SAMPLE数据库HR.
下面为class的原代码:
/**
* jdbc test program
* create by Rainny 09-03-14
*/
import java.sql.*;
import oracle.jdbc.pool.OracleDataSource;
public class DataHandler {
String jdbcUrl = "jdbc:oracle:thin:@172.17.16.33:1521:ORA33";
String userid = "HR";
String password = "HR";
Connection conn;
public DataHandler() {
}
public static void main(String[] args) {
DataHandler dataHandler = new DataHandler();
try{
ResultSet resultSet = dataHandler.getAllEmployees();
while (resultSet.next()) {
System.out.println(resultSet.getInt(1) + " "
+ resultSet.getString(2) + " " + resultSet.getString(3)
+ " " + resultSet.getString(4));
}
dataHandler.update();
dataHandler.insertdata();
}
catch(Exception e){
e.printStackTrace();
}
}
public void getDBConnection() throws SQLException {
OracleDataSource ds;
ds = new OracleDataSource();
ds.setURL(jdbcUrl);
conn = ds.getConnection(userid, password);
}
public ResultSet getAllEmployees() throws SQLException {
getDBConnection();
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
String query = "SELECT * FROM Employees ORDER BY employee_id";
System.out.println("/nExecuting query: " + query);
ResultSet rset = stmt.executeQuery(query);
return rset;
}
public void update() throws SQLException {
getDBConnection();
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
String sqlString = "update Employees SET first_name = 'Rainny' WHERE employee_id =100";
System.out.println("/nExecuting: " + sqlString);
stmt.execute(sqlString);
}
public void insertdata() throws SQLException {
StringBuffer v_str = new StringBuffer();
for (int i = 0; i < 4001; i++) {
v_str.append("a");
}
getDBConnection();
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO test VALUES (?)");
pstmt.setObject(1, v_str.toString());
System.out.println("/nExecuting: inserting");
pstmt.executeUpdate();
}
}
在这个程序中,我分别用了createStatement()和prepareStatement两种方法来发布SQL语句。最后一个方法insertdata()是用于测试在什么情况下会抛出:java.sql.SQLException: ORA-01461: can bind a LONG value only for insert into a LONG column 错误。测试的结果是:当字段类型定义为varchar2,而你用JDBC插入的字符串超过4000时就会抛出这个错误。
编译的方法是这样的:
(1)先新建目录:E:/e/rainny/JDBC_programming/hr,然后将上面这段代码存成文件:DataHandler.java存放到这个目录中。并且将oracle JDBC JAR包ojdbc14.jar拷到这个目录
(2)我们打开命令行:CMD,进到E:/e/rainny/JDBC_programming/hr这个目录,调用javac对这个java原代码进行编译(当然,前提是要先安装JDK):
E:/e/rainny/JDBC_programming/hr>javac -classpath .;ojdbc14.jar DataHandler.java
(3)如果代码没有问题的话,编译后将在同一目录生成一个DataHandler.class文件。这是一个字节文件,可以在任何有JRE的平台执行,相当于JAVA的可执行文件了。
(4)执行这个程序,对oracle数据库的数据进行操作
E:/e/rainny/JDBC_programming/hr>java -classpath .;ojdbc14.jar DataHandler
注意,执行的时候,不需要将扩展名.class写上。Java的程序是区分大小写的。当然,还需要指定classpath: -classpath .;ojdbc14.jar(.;表示当前路径) 。
由于只是暂时的测试,所以没有装JAVA的IDE(开源的有Eclipse),所以代码经过好几轮的修改。Kuhn和Jeff给了我很好的帮助。是他们给我上了JAVA实战的第一课,所以,Very appreciate!