我收到错误“无法发出数据”。
这里是SSCCE
//package mysqltest;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.Applet;
import java.awt.TextArea.*;
import java.sql.*;
import java.util.*;
import javax.swing.plaf.*;
import javax.swing.plaf.basic.*;
import java.net.*;
import java.applet.*;
public class test extends JApplet {
public JTextArea c;
public void init() {
c = new JTextArea();
add(c);
c.append("Looking for database...");
Connection conn = null;
Properties props = new Properties();
String url = "jdbc:mysql://localhost:3306/";
String dbName = "mystik";
String driver = "com.mysql.jdbc.Driver";
String userName = "root";
String password = "";
String loggedusername = getParameter("name");
try {
Class.forName(driver).newInstance();
props.put("user", "root");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mystik", props);
c.append("\nConnected to the database");
c.append("\nGetting stats for: " + loggedusername);
PreparedStatement statement = conn.prepareStatement( "select * from `user` where `username` = '"+loggedusername+"'");
ResultSet result = statement.executeQuery();
// just a dumb mysql statement!
while(result.next())
{
c.append("\nUsername: "+result.getString(2)+ "\nLevel: "+result.getString(6)+"\nEXP: "+result.getString(8)+"\n");
}
PreparedStatement updateEXP = conn.prepareStatement( "update`user` set `exp` = '666' where `username` = '"+loggedusername+"'");
ResultSet updateEXP_done = updateEXP.executeQuery();
while(result.next())
{
c.append("\nUsername: "+result.getString(2)+ "\nLevel: "+result.getString(6)+"\nEXP: "+result.getString(8)+"\n");
}
conn.close();
c.append("\nDisconnected from database");
} catch (Exception e) {
e.printStackTrace();
}
}
}
它有效……仅此而已update
java查询没有。
这是 JTextArea 看到的内容:
Looking for database...
Connected to the database
Getting stats for: weka
Username: weka
Level: 1
EXP: 1
这是我的错误:
added manifest
adding: test.class(in = 2440) (out= 1308)(deflated 46%)
adding: mysql-connector-java-5.1.13-bin.jar(in = 767492) (out= 735869)(deflated
4%)
Warning:
The signer certificate will expire within six months.
java.sql.SQLException: Can not issue data manipulation statements with executeQu
ery().
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
at com.mysql.jdbc.StatementImpl.checkForDml(StatementImpl.java:436)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:
2176)
at test.init(test.java:53)
at sun.applet.AppletPanel.run(AppletPanel.java:424)
at java.lang.Thread.run(Thread.java:619)
最后,这是我如何使用 .bat 文件进行编译。
@ECHO OFF
C:
CD \wamp\www\mystikrpg\mysqltest
javac -cp mysql-connector-java-5.1.13-bin test.java
jar cvf mysqlTry.jar test.class mysql-connector-java-5.1.13-bin.jar
jarsigner -keystore dankey -storepass soccer -keypass soccer mysqlTry.jar gamerpg
appletviewer -J-Djava.security.policy=game.policy mysqltry.html
我该如何修复这个错误?
谢谢。
AS 准备好的声明 http://download.oracle.com/javase/1.4.2/docs/api/java/sql/PreparedStatement.html文档:
执行这里的SQL语句
PreparedStatement 对象,它必须
是 SQL INSERT、UPDATE 或 DELETE
陈述;或 SQL 语句
不返回任何内容,例如 DDL
陈述。
要执行更新、删除或插入数据库中任何数据的查询,您不能使用executeQuery
...您必须使用:.executeUpdate(query)
所以这段代码(WRONG):
PreparedStatement updateEXP = conn.prepareStatement("update `user` set `exp` = '666' where `username` = '"+loggedusername+"'");
ResultSet updateEXP_done = updateEXP.executeQuery();
必须看起来像(GOOD):
正确使用
PreparedStatement updateEXP = conn.prepareStatement("update `user` set `exp` = ? ");
updateEXP.setString(1, loggedusername);
ResultSet updateEXP_done = updateEXP.executeUpdate();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)