try
{
String theUrl=("jdbc:odbc:chessDB");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection dbConn=DriverManager.getConnection(theUrl,"sa","");
Statement sqlStmt=dbConn.createStatement();
ResultSet rSet=sqlStmt.executeQuery("SELECT * FROM userInfo");
//建立数据库连接
while(rSet.next()){
String Name=rSet.getString("Name").trim(); //左右有空格
String Password=rSet.getString("Password");
/* int id=rSet.getInt("ID");
System.out.println(id);
int s=rSet.getInt("Marks");
System.out.println(s);
int win=rSet.getInt("WIN");
System.out.println(win); */
//int fail=rSet.getInt(8);
// System.out.println("失败"+fail);
//int level=rSet.getInt("Levl");
// System.out.println("等级"+level);
if(logininfo[0].equals(Name.trim())&&logininfo[1].equals(Password.trim()))
{ System.out.println(11);
SendData btclient=new SendData();
btclient.Head1=("loginok");
oos.writeObject(btclient);
oos.flush(); //发送验证通过信息
UserInfo myuf=new UserInfo();
System.out.println("3ok");
myuf.setUserInfo(id,name,level,s,win,fail,0);
{
String theUrl=("jdbc:odbc:chessDB");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection dbConn=DriverManager.getConnection(theUrl,"sa","");
Statement sqlStmt=dbConn.createStatement();
ResultSet rSet=sqlStmt.executeQuery("SELECT * FROM userInfo");
//建立数据库连接
while(rSet.next()){
String Name=rSet.getString("Name").trim(); //左右有空格
String Password=rSet.getString("Password");
/* int id=rSet.getInt("ID");
System.out.println(id);
int s=rSet.getInt("Marks");
System.out.println(s);
int win=rSet.getInt("WIN");
System.out.println(win); */
//int fail=rSet.getInt(8);
// System.out.println("失败"+fail);
//int level=rSet.getInt("Levl");
// System.out.println("等级"+level);
if(logininfo[0].equals(Name.trim())&&logininfo[1].equals(Password.trim()))
{ System.out.println(11);
SendData btclient=new SendData();
btclient.Head1=("loginok");
oos.writeObject(btclient);
oos.flush(); //发送验证通过信息
UserInfo myuf=new UserInfo();
System.out.println("3ok");
myuf.setUserInfo(id,name,level,s,win,fail,0);
文件名:JdbcBean.java
作 者:counter (何明)
创建时间:2000/12/02
功能
1. 装载 JDBC 驱动方式
2. 连接数据库
3. 读取数据库中存储的数据,并存储在数组中
4. 对数据库修改
5. 对数据库修改操作提交、回滚
6. 关闭数据库连接
6. 返回操作结果*/
package heming;import java.io.*;
import java.util.*;
import java.sql.*;public class JdbcBean
{
String URL; //数据库连接地址
Connection conn; //数据库连接句柄
Statement stmt; //得到数据库的信息
ResultSet rs; //执行SQL 语句得到结果集合
String strUpdate;
String strQuery;
ResultSetMetaData rsmd; //数据结果集合
int cols;
int rows;
Vector result;
public void setConnect(String Driver,String URL)
throws Exception , SQLException
{
// Load the "Driver" driver方式
Class.forName(Driver);
// 连接到数据库
conn = DriverManager.getConnection(URL);
// 设定数据库连接 的提交方式 (是否自动提交)
conn.setAutoCommit(false);
// 得到数据库的信息
stmt = conn.createStatement();
}
public void JdbcBean(String Driver,String Protocol,String Host,String Port,
String User,String Password,String Database)
throws Exception , SQLException
{
// Load the "Driver" driver方式
Class.forName(Driver);
URL=Protocol+":"+User+"/"+Password+"@"+Host+":"+Port+":"+Database;
// 连接到数据库
conn = DriverManager.getConnection(URL);
// 设定数据库连接 的提交方式 (是否自动提交)
conn.setAutoCommit(false);
// 得到数据库的信息
stmt = conn.createStatement();
}
public Connection getConnection()
throws SQLException,IOException,Exception
{
return conn;
}
public String getURL()
throws IOException
{
return URL;
}
public Statement createStatement()
throws SQLException,Exception
{
return stmt;
}
public void setQuery(String strQuery)
throws SQLException , Exception ,Exception
{
// 执行SQL 语句得到结果集合
rs = stmt.executeQuery(strQuery);
// 获得数据结果集合
rsmd = rs.getMetaData();
// 确定数据集的列数,亦字段数
cols = rsmd.getColumnCount();
rows = 0;
result = new Vector();
// 将每一个数据值按顺序存储到数组中
String s[] = new String[cols];
for (int i=1; i<=cols; i++)
{
s[i-1] = rsmd.getColumnLabel(i) ;
}
result.addElement(s);
rows ++;
while (rs.next())
{
s = new String[cols];
// for one row
for (int i=1; i<=cols; i++)
{
s[i-1] = helper(rs, rsmd.getColumnType(i), i);
}
// 将每一条纪录信息存储到数组中
result.addElement(s);
rows ++;
}
}
public void executeUpdate(String strUpdate)
throws SQLException
{
// 对数据库记录进行修改、添加
stmt.executeUpdate(strUpdate);
}
public void RollBack()
throws SQLException
{
// 回滚对数据库的修改操作
conn.rollback();
}
public void setCommit()
throws SQLException
{
// 提交对数据库的修改操作
conn.commit();
}
public void Close()
throws SQLException
{
// 关闭数据库连接
if ( stmt != null)
stmt.close();
if ( conn != null )
conn.close();
}
public int getColumnCount()
{
return cols;
} public int getRowCount() {
return rows;
} public String getColumnLabels(int col) {
String[] s = (String[])result.firstElement();
return s[col];
} public String getCell(int col, int row) {
String[] s = (String[])result.elementAt(row);
return s[col];
} protected String helper (ResultSet rs, int dataType, int col)
throws SQLException
{
String retVal = null;
Integer intObj; // ask for data depending on the datatype
switch(dataType)
{
case Types.DATE:
java.sql.Date date_ = rs.getDate(col);
if (date_==null)
return null;
retVal = date_.toString();
break;
case Types.TIME:
java.sql.Time time_ = rs.getTime(col);
if (time_==null)
return null;
retVal = time_.toString();
break;
case Types.TIMESTAMP:
java.sql.Timestamp timestamp_ = rs.getTimestamp(col);
if (timestamp_==null)
return null;
retVal = timestamp_.toString();
break;
case Types.CHAR:
case Types.VARCHAR:
case Types.LONGVARCHAR:
retVal = rs.getString(col);
break;
case Types.NUMERIC:
case Types.DECIMAL:
java.math.BigDecimal numeric = rs.getBigDecimal(col,10);
if (numeric==null)
return null;
retVal = numeric.toString();
break;
case Types.BIT:
boolean bit = rs.getBoolean(col);
Boolean boolObj = new Boolean(bit);
if (boolObj==null)
return null;
retVal = boolObj.toString();
break;
case Types.TINYINT:
byte tinyint = rs.getByte(col);
intObj = new Integer(tinyint);
if (intObj==null)
return null;
retVal = intObj.toString();
break;
case Types.SMALLINT:
short smallint = rs.getShort(col);
intObj = new Integer(smallint);
if (intObj==null)
return null;
retVal = intObj.toString();
break;
case Types.INTEGER:
int integer_ = rs.getInt(col);
intObj = new Integer(integer_);
if (intObj==null)
return null;
retVal = intObj.toString();
break;
case Types.BIGINT:
long bigint = rs.getLong(col);
Long longObj = new Long(bigint);
retVal = longObj.toString();
break;
case Types.REAL:
float real = rs.getFloat(col);
Float floatObj = new Float(real);
retVal = floatObj.toString();
break;
case Types.FLOAT:
case Types.DOUBLE:
double longreal = rs.getDouble(col);
Double doubleObj = new Double(longreal);
retVal = doubleObj.toString();
break;
case Types.BINARY:
case Types.VARBINARY:
case Types.LONGVARBINARY:
byte[] binary = rs.getBytes(col);
if (binary==null)
return null;
retVal = new String(binary);
break;
}
return retVal;
}
}
之前我一直以为是类型的问题,后来我又尝试了 short ,byte可是依然不行,仔细想想是因为ResultSet类的访问指针协议规定的比较死,我在数据库里定义顺序是id,name,win fail...那么rSet访问的顺序也只能是这个顺序,于是我在得到name,password以后再回头调用id自然索引无效了,也是怪自己写程序不规范,绕了半天,不过我觉得还是值得的,加深了理解记住了教训:)
也把这次的一点体会与大家分享。
别急,来者有分,嘿嘿~~
主要是sql语句和得到Name,Password如何写到一个String里面,我不会用分隔符表示,'"&%都不行。
String sql="select * from userinfo where Name='"+name+"' and Password='"+password+"'";
ResultSet rSet=sqlStmt.executeQuery(sql);
对了还有判断为空:
if(!rSet.next()){
... //返回为空,没此用户/密码对
}
else{
... //不为空继续处理。
}