我写了段连接MySql程序如下:
package connectmysql;/**
* <p>Title: 连接MySQL数据库</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
import java.sql.*;
import com.mysql.jdbc.Driver;public class conSql { Connection con;
ResultSet rs;
Statement stmt; public conSql() {
//定义连接类型及连接数据库 ACCESS
try {
// Load the JDBC driver
String driverName = "com.mysql.jdbc.Driver"; // MySQL MM JDBC driver
Class.forName(driverName);
//注册MySQL驱动程序
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//数据库名
String dbName = "bookdb";
//表名
String tableName = "books";
//用户
String username = "dbuser";
//口令
String password = "1234"; String url="jdbc:mysql://localhost/"+dbName;
//连接MYSQL
con = DriverManager.getConnection(url,username,password); con = DriverManager.getConnection(url);
//创建一个JDBC声明
stmt = con.createStatement();
}
catch (ClassNotFoundException e) {
// Could not find the database driver
System.out.println("Could not find the database driver!");
}
catch (SQLException e) {
// Could not connect to the database
System.out.println("Could not connect to the database!");
System.err.println(e.getMessage());
} } //定义数据库执行返回值 RS;
public ResultSet getResult(String strSQL) {
try {
rs = stmt.executeQuery(strSQL);
return rs;
}
catch (SQLException sqle) {
System.out.println(sqle.toString());
return null;
}
} //定义数据库修改保存类
public boolean updateSql(String strSQL) {
try {
stmt.executeUpdate(strSQL);
con.commit();
return true; }
catch (SQLException sqle) {
System.out.println(sqle.toString());
return false;
}
} //定义关闭数据库类
public void closeConnection() {
try {
stmt.close();
con.close();
}
catch (SQLException sqle) {
System.out.println(sqle.toString());
}
} //显示整个表
public void showTable(){
try {
rs = stmt.executeQuery("SELECT * FROM books");
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
while (rs.next()) {
for (int i = 1; i <= numberOfColumns; i++) {
if (i > 1)
//用逗号分隔各列
System.out.print(", "); String columnValue = rs.getString(i);
System.out.print(columnValue);
}
System.out.println("");
} closeConnection();
}
catch (Exception ex) {
System.err.print("Exception: ");
System.err.println(ex.getMessage());
}
} //主程序
public static void main(String[] args) {
conSql da = new conSql();
da.showTable(); }
}结果执行时报连接错误如下:
Communication link failure: java.io.IOException, underlying cause: Unexpected end of input stream** BEGIN NESTED EXCEPTION ** java.io.IOException
MESSAGE: Unexpected end of input streamSTACKTRACE:java.io.IOException: Unexpected end of input stream at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:1096) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:626) at com.mysql.jdbc.Connection.createNewIO(Connection.java:1562) at com.mysql.jdbc.Connection.<init>(Connection.java:491) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at connectmysql.conSql.<init>(conSql.java:39) at connectmysql.conSql.main(conSql.java:122)** END NESTED EXCEPTION **Could not connect to the database!Exception: null但我的MySQL5.0版本完全正常,且我可以从cmd中登录并操作MySQL,开机时就把MySQL服务给启动了,为什么在程序中就不行,让我困扰了好久,请大虾们赐教!!!
package connectmysql;/**
* <p>Title: 连接MySQL数据库</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
import java.sql.*;
import com.mysql.jdbc.Driver;public class conSql { Connection con;
ResultSet rs;
Statement stmt; public conSql() {
//定义连接类型及连接数据库 ACCESS
try {
// Load the JDBC driver
String driverName = "com.mysql.jdbc.Driver"; // MySQL MM JDBC driver
Class.forName(driverName);
//注册MySQL驱动程序
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//数据库名
String dbName = "bookdb";
//表名
String tableName = "books";
//用户
String username = "dbuser";
//口令
String password = "1234"; String url="jdbc:mysql://localhost/"+dbName;
//连接MYSQL
con = DriverManager.getConnection(url,username,password); con = DriverManager.getConnection(url);
//创建一个JDBC声明
stmt = con.createStatement();
}
catch (ClassNotFoundException e) {
// Could not find the database driver
System.out.println("Could not find the database driver!");
}
catch (SQLException e) {
// Could not connect to the database
System.out.println("Could not connect to the database!");
System.err.println(e.getMessage());
} } //定义数据库执行返回值 RS;
public ResultSet getResult(String strSQL) {
try {
rs = stmt.executeQuery(strSQL);
return rs;
}
catch (SQLException sqle) {
System.out.println(sqle.toString());
return null;
}
} //定义数据库修改保存类
public boolean updateSql(String strSQL) {
try {
stmt.executeUpdate(strSQL);
con.commit();
return true; }
catch (SQLException sqle) {
System.out.println(sqle.toString());
return false;
}
} //定义关闭数据库类
public void closeConnection() {
try {
stmt.close();
con.close();
}
catch (SQLException sqle) {
System.out.println(sqle.toString());
}
} //显示整个表
public void showTable(){
try {
rs = stmt.executeQuery("SELECT * FROM books");
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
while (rs.next()) {
for (int i = 1; i <= numberOfColumns; i++) {
if (i > 1)
//用逗号分隔各列
System.out.print(", "); String columnValue = rs.getString(i);
System.out.print(columnValue);
}
System.out.println("");
} closeConnection();
}
catch (Exception ex) {
System.err.print("Exception: ");
System.err.println(ex.getMessage());
}
} //主程序
public static void main(String[] args) {
conSql da = new conSql();
da.showTable(); }
}结果执行时报连接错误如下:
Communication link failure: java.io.IOException, underlying cause: Unexpected end of input stream** BEGIN NESTED EXCEPTION ** java.io.IOException
MESSAGE: Unexpected end of input streamSTACKTRACE:java.io.IOException: Unexpected end of input stream at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:1096) at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:626) at com.mysql.jdbc.Connection.createNewIO(Connection.java:1562) at com.mysql.jdbc.Connection.<init>(Connection.java:491) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:171) at connectmysql.conSql.<init>(conSql.java:39) at connectmysql.conSql.main(conSql.java:122)** END NESTED EXCEPTION **Could not connect to the database!Exception: null但我的MySQL5.0版本完全正常,且我可以从cmd中登录并操作MySQL,开机时就把MySQL服务给启动了,为什么在程序中就不行,让我困扰了好久,请大虾们赐教!!!
为什么连两次?把下面的去掉。
其次,如何将3306的端口加上?!我把url改成
String url="jdbc:mysql://localhost:3306/"+dbName;
也是不行。我想是不是连接类没有注册上?因为在异常中有at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346)
这样的错误。希望大家再出出力!
mysql-connector-java-3.1.10-bin.jar加入classpath
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
这句不是多此一举吗?不知楼主从哪里学的?
*************************************** con = DriverManager.getConnection(url,username,password);
con = DriverManager.getConnection(url);
也不要两次. 把驱动程序的JAR文件拷进去.
***********************
下面是我的屡试不爽例子.public static final String DRIVER =
"com.mysql.jdbc.Driver";
public static final String DBURL =
"jdbc:mysql://localhost/Jive?useEncoding=true&characterEncoding=iso8859-1";//加载驱动程序
Class.forName(DRIVER);
Connection con = con = DriverManager.getConnection(DBURL,"user","pass");
//注册MySQL驱动程序
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
至于连接两次,我没把注释加上来,是我的疏忽。但是按楼上所说连接方法,还是报错:
Communication link failure: java.io.IOException, underlying cause: Unexpected end of input stream再把连接代码发一下,请大家关注
public conSql() {
//定义连接类型及连接数据库 ACCESS
try {
// Load the JDBC driver
String driverName = "com.mysql.jdbc.Driver"; // MySQL MM JDBC driver
Class.forName(driverName);
//数据库名
String dbName = "mysql";
//表名
String tableName = "user";
//用户
String username = "dbuser";
//口令
String password = "1234"; String url="jdbc:mysql://localhost/mysql?useEncoding=true&characterEncoding=iso8859-1"; //连接MYSQL
con = DriverManager.getConnection(url,username,password);
//创建一个JDBC声明
stmt = con.createStatement();
}
catch (ClassNotFoundException e) {
// Could not find the database driver
System.out.println("Could not find the database driver!");
}
catch (SQLException e) {
// Could not connect to the database
System.out.println("Could not connect to the database!");
System.err.println(e.getMessage());
} }注明:mysql-connector-java-3.1.10-bin.jar和mysql-connector-java-3.1.10-bin-g.jar我都加入lib并配置了环境变量,mysqldriver.jar我也第一时间就加入了,所用jdk是jbuilder自带,且在外部连接mysql完全正常。
import java.sql.*;
import java.io.*;
/**
* <p>数据库连接Bean</p>
* <p>进行数据库操作</p>
* 执行查询操作流程:SQL查询调用方法 ResultSet rs = querySQL(String SQL),插入、修改和删除调用方法execSQL(String sql)。
* 操作完成后,调用close()的方法关闭记录集和连接。
* <p>MySql JDBC连接串说明 url格式:jdbc:mysql://[hostname][:port]/dbname[?param1=value1][¶m2=value2]...</p>
* <p>备注:在执行SQL查询、插入、修改和删除时会自己创建数据库连接</p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author
* @version 1.0
*/
public class connDB
{
final String SerIp="127.0.0.1";//服务器IP地址
final String DBName="test";//服务器IP地址
final String sDBDriver = "org.gjt.mm.mysql.Driver"; //MySql JDBC驱动串
final String UserID="root";//数据库用户名
final String Password="";//数据库密码
String sConnStr = ""; //连接字符串
static Connection conn=null;//以静态形式定义
static Statement stmt=null;//以静态形式定义
static ResultSet rs = null;//以静态形式定义 /**
* <p>Method:构造方法</p>
*/
public connDB() {
sConnStr = "jdbc:mysql://"+SerIp+"/"+DBName; //创建数据库连接字符串
} /**
* <p>Method:CreatDB()</p>
* <p>Description:创建数据库连接,同时返回一个连接。如果失败屏幕输出“Create False”,否则为“Create True”.如果是程序执行失败抛出ERROR返回null</p>
* @params 无
* @return Connection 返回一个连接
*/
public Connection CreatDB(){
try{
Class.forName(sDBDriver);//加载数据库驱动
try{
conn=DriverManager.getConnection(sConnStr, UserID, Password);//得到一个连接
System.out.println("Create True");
return conn;
}catch(Exception e){System.out.println("Create False--得到数据库连接错:"+e.getMessage());return conn;}
}catch(Exception e){System.out.println("Create False--加载数据库驱动错:"+e.getMessage());return conn;}
} /**
* <p>Method:querySQL(String SQL)</p>
* <p>Description:执行一条SQL,返回记录集,抛出异常</p>
* @params String SQL-所执行的sql语句
* @return ResultSet rs-返回RS数据集>
*/
public ResultSet querySQL(String sql) throws Exception{
if(conn==null)
conn=CreatDB();
try {
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
stmt = conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql); //执行SQL
}catch(Exception e)
{System.out.println("得到RS记录集错: " + e.getMessage()); }
return rs;
} /**
* <p>Method:executeQuery(String sql)</p>
* <p>Description:执行一条SQL,抛出异常</p>
* @params String SQL-所执行的sql语句
* @return 无
*/
public void executeQuery(String sql) throws Exception{
if(conn==null)
conn=CreatDB();
try {
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
stmt = conn.createStatement();
stmt.executeUpdate(sql);
}catch(Exception e)
{System.out.println("插入记录集错: " + e.getMessage()); }
} /**
* <p>Method:getMaxID(String tab, String col)</p>
* <p>Description:得到列最大值加1,用于主键添加</p>
* @params String tab 表明
* @params String col字段明 <b>备注:字段类型必须为整型或长整型</b>
* @return long 返回长整型ID号>
*/
public long getMaxID(String tab, String col) throws Exception{
long maxid=0;
if(conn==null)
conn=CreatDB();
try {
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
String sql = String.valueOf(String.valueOf( (new StringBuffer("select max(")).append(col).append(") from ").append(tab).append("")));
stmt = conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql); //执行SQL
if (rs != null) {
rs.next();
maxid = rs.getLong(1)+1;
}
}catch(Exception e)
{System.out.println("得到RS记录集错: " + e.getMessage()); }
return maxid;
} /**
* <p>Method:close()</p>
* <p>Description:关闭连接以及RS数据集,抛出异常</p>
* @params 无
* @return 无
*/
public void close() throws Exception{
try {
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
if(conn!=null){
conn.close();
conn=null;
}
System.out.println("连接已关闭");
}catch(SQLException e)
{System.err.println("关闭连接错: " + e.getMessage()); }
}}
2、然后重新启动你的机器
3、String url="jdbc:mysql://localhost/jxgl";
4、最好你上面的那个connector.jar文件名修改一下,用短点的。
5、连接的库文件最好从这个地址下载:http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-3.1.10.zip/from/http://mysql.isu.edu.tw/
下载后得到的文件中,只要用mysql-connector-java-3.1.10-bin.jar这个文件就好了。