java.sql.SQLRecoverableException: 无法从套接字读取更多的数据

java.sql.SQLRecoverableException: 无法从套接字读取更多的数据,第1张

检查网络是否有问题吗?

使用plsql developer检查是否能够正常链接到数据库主机。

第3个trycatch块,没有检查是conn变量是否为空,如果获取链接失败第三个try也会抛出异常。

package comdao;import javasql;import javaxnamingContext;

import javaxnamingInitialContext;

import javaxnamingNamingException;

import javaxsqlDataSource;public class BaseDao {

/

创建数据库连接及关闭

/

// 打开连接

public static Connection getConnection() {

Connection con = null; / oracl 的连接 /

// try { // ClassforName("oraclejdbcdriverOracleDriver");

// con = DriverManagergetConnection(

// "jdbc:oracle:thin:@127001:1521:orcl", "bbs", "sa");

// } catch (ClassNotFoundException e) {

// eprintStackTrace();

// } catch (SQLException e) {

// eprintStackTrace();

// }

/ sqlerver 的连接 /

try {

ClassforName("commicrosoftsqlserverjdbcSQLServerDriver");

con = DriverManagergetConnection(

"jdbc:sqlserver://127001:1433;databasename=bbs", "sa",

"zhou");

} catch (ClassNotFoundException e) {

eprintStackTrace();

} catch (SQLException e) {

eprintStackTrace();

}

//

return con;

} // 关闭

public static void closeAll(Connection connection,

PreparedStatement pStatement, ResultSet res) {

try {

if (connection != null && (!connectionisClosed())) {

connectionclose();

}

if (res != null) {

resclose();

res = null;

}

if (pStatement != null) {

pStatementclose();

pStatement = null;

}

} catch (Exception e) {

eprintStackTrace();

}

}

}

对数据库增删改查package comdao;import javasqlConnection;

import javasqlPreparedStatement;

import javasqlResultSet;

import javasqlSQLException;

import javautilArrayList;

import javautilList;import comentityNews;public class NewsDao {

Connection con = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

/

添加新闻

@param news

@return

/

public boolean newsAdd(News news){

boolean result=false;

String sql="insert into news values(,)";

con=BaseDaogetConnection();

try {

pstmt=conprepareStatement(sql);

pstmtsetString(1, newsgetContent());

pstmtsetString(2, FormatTimenewTime());

int i = 0;

i = pstmtexecuteUpdate();

if (i > 0)

result = true;

} catch (SQLException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

return result;

}

/

修改新闻

@param news

@return

/

public boolean updateNews(News news){

boolean result=false;

con=BaseDaogetConnection();

try {

pstmt=conprepareStatement("update news set content= ,writedate= where newsid=");

pstmtsetString(1, newsgetContent());

pstmtsetString(2, FormatTimenewTime());

pstmtsetInt(3, newsgetNewsID());

int i = 0;

i = pstmtexecuteUpdate();

if (i > 0)

result = true;

} catch (SQLException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

return result;

}

/

删除新闻

@param news

@return

/

public boolean deleteNews(News news){

boolean result=false;

String sql=Stringformat("delete from news where newsid=%d", newsgetNewsID());

con=BaseDaogetConnection();

try {

pstmt=conprepareStatement(sql);

int i = 0;

i = pstmtexecuteUpdate();

if (i > 0)

result = true;

} catch (SQLException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

return result;

}

/

删除新闻 重载

@param newsId

@return

/

public boolean deleteNews(int newsId){

boolean result=false;

String sql=Stringformat("delete from news where newsid=%d", newsId);

con=BaseDaogetConnection();

try {

pstmt=conprepareStatement(sql);

int i = 0;

i = pstmtexecuteUpdate();

if (i > 0)

result = true;

} catch (SQLException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

return result;

}

/

查询所有的新闻

@return

/

public List<News> selectAllNews(){

List<News> list=new ArrayList<News>();

String sql="select from Users";

con=BaseDaogetConnection();

try {

pstmt=conprepareStatement(sql);

rs=pstmtexecuteQuery();

while(rsnext()){

News news=new News();

newssetNewsID(rsgetInt(1));

newssetContent(rsgetString(2));

newssetWriteDate(rsgetString(3));

listadd(news);

}

} catch (SQLException e) {

// TODO Auto-generated catch block

eprintStackTrace();

} finally {

BaseDaocloseAll(rs, pstmt, con);

}

return list;

}

/

查询单个

@return

/

public News selectOneNews(){

News news=new News();

con=BaseDaogetConnection();

try {

pstmt=conprepareStatement("select top 1 from news order by newsid desc");

rs=pstmtexecuteQuery();

while(rsnext()){

newssetNewsID(rsgetInt(1));

newssetContent(rsgetString(2));

newssetWriteDate(rsgetString(3));

}

} catch (SQLException e) {

// TODO Auto-generated catch block

eprintStackTrace();

} finally {

BaseDaocloseAll(rs, pstmt, con);

}

return news;

}

}

实体类package comentity;import javaioSerializable;

public class News implements Serializable{

private int newsID;

private String content;

private String writeDate; public News() {

super();

// TODO Auto-generated constructor stub

} public News(String content, String writeDate) {

super();

thiscontent = content;

thiswriteDate = writeDate;

} public News(int newsID, String content, String writeDate) {

super();

thisnewsID = newsID;

thiscontent = content;

thiswriteDate = writeDate;

} public int getNewsID() {

return newsID;

} public void setNewsID(int newsID) {

thisnewsID = newsID;

} public String getContent() {

return content;

} public void setContent(String content) {

thiscontent = content;

} public String getWriteDate() {

return writeDate;

} public void setWriteDate(String writeDate) {

thiswriteDate = writeDate;

}

}

1 在开发环境中加载指定数据库的驱动程序。

接下来的实验中,使用数据库MySQL,所以需要下载MySQL支持JDBC的驱动程序(mysql-connector-java-5118-binjar)。

2 开发环境是MyEclipse,将下载得到的驱动程序加载进开发环境中。

3 在Java程序中加载驱动程序。

在Java程序中,通过 “ClassforName(“指定数据库的驱动程序”)” 

方式来加载添加到开发环境中的驱动程序,例如ClassforName(“commysqljdbcDriver”)。

4 创建数据连接对象:通过DriverManager类创建数据库连接对象Connection。

DriverManager类作用于Java程序和JDBC驱动程序之间,用于检查所加载的驱动程序是否可以建立连接,然后通过它的getConnection方法,根据数据库的URL、用户名和密码,创建一个JDBC 

Connection 对象。代码如:Connection connection =  DriverManagergetConnection(“连接数据库的URL", "用户名", 

"密码”)。

    其中,URL=协议名+IP地址(域名)+端口+数据库名称;用户名和密码是指登录数据库时所使用的用户名和密码。具体示例创建MySQL的数据库连接代码如下:

              Connection connectMySQL  = 

 DriverManagergeiConnection(“jdbc:mysql://localhost:3306/myuser","root" 

,"root" );

5 创建Statement对象:Statement 类的主要是用于执行静态 SQL 

语句并返回它所生成结果的对象。

通过Connection 对象的 createStatement()方法可以创建一个Statement对象。例如:Statement statament = 

connectioncreateStatement(); 具体示例创建Statement对象代码如下:Statement statamentMySQL =connectMySQLcreateStatement(); 

6 调用Statement对象的相关方法执行相对应的 SQL 

语句:通过execuUpdate()方法用来数据的更新,包括插入和删除等 *** 作,例如向staff表中插入一条数据的代码:

statementexcuteUpdate( "INSERT INTO 

staff(name, age, sex,address, depart, worklen,wage)" + " VALUES ('Tom1', 321, 

'M', 'china','Personnel','3','3000' ) ") ; 

7 通过调用Statement对象的executeQuery()方法进行数据的查询,而查询结果会得到 

ResulSet对象,ResulSet表示执行查询数据库后返回的数据的集合,ResulSet对象具有可以指向当前数据行的指针。通过该对象的next()方法,使得指针指向下一行,然后将数据以列号或者字段名取出。如果当next()方法返回null,则表示下一行中没有数据存在。使用示例代码如下:

ResultSet resultSel = 

statementexecuteQuery( "select  from staff" );

8 关闭数据库连接:使用完数据库或者不需要访问数据库时,通过Connection的close() 方法及时关闭数据连接。

package comoadaoimpl; import javasqlConnection; </SPAN></li>import javasqlPreparedStatement; </SPAN></li>import javasqlResultSet; </SPAN></li>import javasqlSQLException; </SPAN></li>import javasqlStatement; </SPAN></li>import javautilList; </SPAN></li>import javautilMap; </SPAN></li> import orgapachecommonsloggingLog; </SPAN></li>import orgapachecommonsloggingLogFactory; </SPAN></li> import comoacoreDynaForm; </SPAN></li>import comoadaoDao; </SPAN></li>import comoajdbcConnectionFactory; </SPAN></li>import comoajdbcDaoAccessException; </SPAN></li>import comoajdbcDybaBean; </SPAN></li>import comoajdbcJdbcPage; </SPAN></li>import comoajdbcPage; </SPAN></li>import comoajdbcRowsDynaClass; </SPAN></li> / </SPAN></li> 基类DAO,实现一些基本共有方法 @author Gao_wx Mar 26, 2008 / public class BaseDao implements Dao { </SPAN></li> protected Log logger = LogFactorygetLog(BaseDaoclass); </SPAN></li> // 获取数据库链接 </SPAN></li> protected Connection getConnection() { </SPAN></li> return ConnectionFactorygetConnection(); </SPAN></li> } // 在此链接上,根据sql语句获取List </SPAN></li> protected List<DybaBean> getList(Connection conn, String sql) </SPAN></li> throws DaoAccessException { </SPAN></li> try { </SPAN></li> Statement st = conncreateStatement( ResultSetTYPE_SCROLL_INSENSITIVE, ResultSetCONCUR_READ_ONLY); ResultSet rs = stexecuteQuery(sql); return getList(rs); </SPAN></li> } catch (SQLException e) { </SPAN></li> throw new DaoAccessException(sql, e); </SPAN></li> } } // 根据Result获取List </SPAN></li> protected List<DybaBean> getList(ResultSet rs) throws SQLException { </SPAN></li> RowsDynaClass rsdc = new RowsDynaClass(rs); </SPAN></li> return rsdcgetRows(); </SPAN></li> } // 根据sql语句获取List </SPAN></li> protected List<DybaBean> getList(String sql) throws DaoAccessException { </SPAN></li> Connection conn = getConnection(); return getList(conn, sql); </SPAN></li> } // 在此连接上,根据sql语句,id加载一条记录 </SPAN></li> protected DybaBean loadById(Connection conn, String sql, int id) </SPAN></li> throws DaoAccessException { </SPAN></li> try { </SPAN></li> PreparedStatement pst = connprepareStatement(sql, ResultSetTYPE_SCROLL_INSENSITIVE, ResultSetCONCUR_READ_ONLY); pstsetInt(1, id); </SPAN></li> ResultSet rs = pstexecuteQuery(); List list = getList(rs); if (listsize() > 1) { </SPAN></li> loggerwarn("加载了2条以上的记录,请检查sql:" + sql); </SPAN></li> } if (listsize() == 0) { </SPAN></li> loggerwarn("数据库没有此记录!"); </SPAN></li> return null; </SPAN></li> } else { </SPAN></li> return (DybaBean) listget(0); </SPAN></li> } } catch (SQLException e) { </SPAN></li> throw new DaoAccessException(sql, e); </SPAN></li> } } // 根据sql语句,id,加载一条记录 </SPAN></li> protected DybaBean loadById(String sql, int id) throws DaoAccessException { </SPAN></li> Connection conn = getConnection(); return loadById(conn, sql, id); </SPAN></li> } // 在此连接上,根据Sql和id删除一条记录,返回影响行数 </SPAN></li> protected int deleteById(Connection conn, String sql, int id) </SPAN></li> throws SQLException { </SPAN></li> PreparedStatement pst = connprepareStatement(sql, ResultSetTYPE_SCROLL_INSENSITIVE, ResultSetCONCUR_READ_ONLY); pstsetInt(1, id); </SPAN></li> int del = pstexecuteUpdate(); </SPAN></li> return del; </SPAN></li> } // 根据sql语句,id删除一条记录 </SPAN></li> protected int deleteById(String sql, int id) throws DaoAccessException { </SPAN></li> Connection conn = getConnection(); try { </SPAN></li> int del = deleteById(conn, sql, id); </SPAN></li> return del; </SPAN></li> } catch (SQLException e) { </SPAN></li> throw new DaoAccessException(sql, e); </SPAN></li> } } protected Page getPage(DynaForm form, String sql) throws DaoAccessException { </SPAN></li> Connection conn = getConnection(); Page page = getPage(conn, form, sql); return page; </SPAN></li> } // 获取分页对象 </SPAN></li> protected Page getPage(Connection conn, DynaForm form, String sql) </SPAN></li> throws DaoAccessException { </SPAN></li> int p = formgetInt("p"); </SPAN></li> if (p < 1) { </SPAN></li> p = 1; </SPAN></li> } int size = formgetInt("size"); </SPAN></li> if (size < 10) { </SPAN></li> size = 10; </SPAN></li> } Page page; try { </SPAN></li> page = new JdbcPage(conn, sql, p, size); </SPAN></li> } catch (SQLException e) { </SPAN></li> throw new DaoAccessException(sql, e); </SPAN></li> } return page; </SPAN></li> } }

如果是在插入数据少的时候正常,插入的数据多的时候出现这种问题的话,就说明你需要将原来的链接重新连一次,最好是在代码中每插入一定数据就重新连一次。

如果数据量很小的话,就先检查一下链接配置。

Transact_SQL小手册

Transact_SQL

--语 句 功 能

--数据 *** 作

SELECT --从数据库表中检索数据行和列

INSERT --向数据库表添加新数据行

DELETE --从数据库表中删除数据行

UPDATE --更新数据库表中的数据

--数据定义

CREATE TABLE --创建一个数据库表

DROP TABLE --从数据库中删除表

ALTER TABLE --修改数据库表结构

CREATE VIEW --创建一个视图

DROP VIEW --从数据库中删除视图

CREATE INDEX --为数据库表创建一个索引

DROP INDEX --从数据库中删除索引

CREATE PROCEDURE --创建一个存储过程

DROP PROCEDURE --从数据库中删除存储过程

CREATE TRIGGER --创建一个触发器

DROP TRIGGER --从数据库中删除触发器

CREATE SCHEMA --向数据库添加一个新模式

DROP SCHEMA --从数据库中删除一个模式

CREATE DOMAIN --创建一个数据值域

ALTER DOMAIN --改变域定义

DROP DOMAIN --从数据库中删除一个域

--数据控制

GRANT --授予用户访问权限

DENY --拒绝用户访问

REVOKE --解除用户访问权限

--事务控制

COMMIT --结束当前事务

ROLLBACK --中止当前事务

SET TRANSACTION --定义当前事务数据访问特征

--程序化SQL

DECLARE --为查询设定游标

EXPLAN --为查询描述数据访问计划

OPEN --检索查询结果打开一个游标

FETCH --检索一行查询结果

CLOSE --关闭游标

PREPARE --为动态执行准备SQL 语句

EXECUTE --动态地执行SQL 语句

DESCRIBE --描述准备好的查询

---局部变量

declare @id char(10)

--set @id = '10010001'

select @id = '10010001'

---全局变量

---必须以开头

--IF ELSE

declare @x int @y int @z int

select @x = 1 @y = 2 @z=3

if @x > @y

print 'x > y' --打印字符串'x > y'

else if @y > @z

print 'y > z'

else print 'z > y'

--CASE

use pangu

update employee

set e_wage =

case

when job_level = ’1’ then e_wage108

when job_level = ’2’ then e_wage107

when job_level = ’3’ then e_wage106

else e_wage105

end

--WHILE CONTINUE BREAK

declare @x int @y int @c int

select @x = 1 @y=1

while @x < 3

begin

print @x --打印变量x 的值

while @y < 3

begin

select @c = 100@x + @y

print @c --打印变量c 的值

select @y = @y + 1

end

select @x = @x + 1

select @y = 1

end

--WAITFOR

--例 等待1 小时2 分零3 秒后才执行SELECT 语句

waitfor delay ’01:02:03’

select from employee

--例 等到晚上11 点零8 分后才执行SELECT 语句

waitfor time ’23:08:00’

select from employee

SELECT

select (列名) from table_name(表名) where column_name operator value

ex:(宿主)

select from stock_information where stockid = str(nid)

stockname = 'str_name'

stockname like '% find this %'

stockname like '[a-zA-Z]%' --------- ([]指定值的范围)

stockname like '[^F-M]%' --------- (^排除指定范围)

--------- 只能在使用like关键字的where子句中使用通配符)

or stockpath = 'stock_path'

or stocknumber < 1000

and stockindex = 24

not stocksex = 'man'

stocknumber between 20 and 100

stocknumber in(10,20,30)

order by stockid desc(asc) --------- 排序,desc-降序,asc-升序

order by 1,2 --------- by列号

stockname = (select stockname from stock_information where stockid = 4)

--------- 子查询

--------- 除非能确保内层select只返回一个行的值,

--------- 否则应在外层where子句中用一个in限定符

select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复

select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name

select stockname , "stocknumber" = count() from table_name group by stockname

--------- group by 将表按行分组,指定列中有相同的值

having count() = 2 --------- having选定指定的组

//下面是数据库为MySQL的 *** 作方式如果是SQLServer,将driver更改为"commicrosoftjbdcsqlserverSQLServerDriver",url更改为"jdbc:microsoft:sqlserver://localhost:port;DatabaseName=dbname"就可以了

String driver="commysqljdbcDriver";

String url="jdbc:mysql://localhost:3306/dbname";

String sql="select money from t_A,t_B where t_Anum=t_Bnum and t_Aname='小张'";//定义获取Money的SQL查询语句

ClassforName(driver);

Connection conn=DriverManagegetConnection(url,dbuser,dbpassword);//获取指定数据库的连接

Statement st=conncreateStatement();

ResultSet rs=stexecuteQuery();

if(rsnext()){//如果获取到数据

return rsgetInt(1);//返回money值

}

else{

return 0;//没有从数据库找到money

}

以上就是关于java.sql.SQLRecoverableException: 无法从套接字读取更多的数据全部的内容,包括:java.sql.SQLRecoverableException: 无法从套接字读取更多的数据、在Java中如何对数据库中的数据进行 *** 作、在java中怎样连接mysql数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9626171.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存