需要学习java,记录从。net到java的笔记。
下载jar包
首先针对于不同的数据库需要下载相应的jar包。类似于.net 中连接不同数据库的dll,只是.net直接在framework里面包含了,这个需要自己到对应的官网上下载。
主要包:
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
驱动名称等:http://www.cnblogs.com/kunpengit/archive/2011/12/13/2285933.html
数据库 |
驱动类名 |
URL格式 |
Oracle |
oracle.jdbc.driver.OracleDriver |
jdbc:oracle:thin:@hostip:1521:dbname |
Sybase |
com.sybase.jdbc2.jdbc.SybDriver |
jdbc:sybase:Tds:hostip:4100/dbname |
Mysql |
com.mysql.jdbc.Driver |
jdbc:mysql://hostip:3306/dbname?useUnicode=true&characterEncoding=GBK |
SQLServer 2000 |
com.microsoft.jdbc.sqlserver.SQLServerDriver |
jdbc:microsoft:sqlserver://hostip:1433;DatabaseName=dbname |
SQLServer 2005 |
com.microsoft.sqlserver.jdbc.SQLServerDriver |
jdbc:sqlserver://hostip:1433;DatabaseName=dbname |
SQLServer 7.0 |
net.sourceforge.jtds.jdbc.Driver |
jdbc:jtds:sqlserver://hostip:1433/dbname |
DB2 |
com.ibm.db2.jcc.DB2Driver |
jdbc:db2://hostip:50000/dbname |
Informix |
com.informix.jdbc.IfxDriver |
jdbc:informix-sqli://hostip:port/dbname:informixserver=<dbservername> |
主要对象PreparedStatement
(为了好记,可以当做command对象)
boolean |
execute() 在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。 |
ResultSet |
executeQuery() 在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。 |
int |
executeUpdate() 在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT 、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。 |
防止sql注入
pstmt.setString(1, "pf"); 类似与param
代码片段:
public static int update() {
Connection conn = getConn();
int i = 0;
String sql = "update user set username=? where userid=?";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setString(1, "pf");
pstmt.setString(2, "1");
i = pstmt.executeUpdate();
System.out.println("resutl: " + i);
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
返回数据集合
与c#有个比较大的不同点,c#中ado.net里面关于数据操作的封装类,像dataset、datatable,这些在java中都没有与之对应的类。返回数据查询的结果只有ResultSet。
因此,如果想返回结果数据结合需要自己实现。以下是实现示例:
首先是实体类
package testJDBC; public class userEntity { private String _userid; private String _userName; public String Userid(){ return this._userid; } public void SetUserid(String NewValue){ this._userid=NewValue; } public String UserName(){ return this._userName; } public void SetUserName(String NewValue){ this._userName=NewValue; } }
然后是数据访问类中的具体实现
public static ArrayList<userEntity> getUserList() { ArrayList<userEntity> userList = new ArrayList<userEntity>(); Connection conn = getConn(); String sql = "select * from user"; PreparedStatement pstmt; try { pstmt = (PreparedStatement) conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); int col = rs.getMetaData().getColumnCount(); while (rs.next()) { userEntity tmpUser = new userEntity(); tmpUser.SetUserid(rs.getString("userid")); tmpUser.SetUserName(rs.getString("username")); userList.add(tmpUser); } } catch (SQLException e) { e.printStackTrace(); } return userList; }