从.net到java系列之jdbc

需要学习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对象)

booleanexecute()

在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。

ResultSetexecuteQuery()

在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。

intexecuteUpdate()

在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERTUPDATEDELETE 语句;或者是无返回内容的 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 user;

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;
    }