package TC;
import java.awt.*;
import javax.swing.*;
import java.sql.*; public class testmt {
Connection conn;
Statement sta;
ResultSet rs;
String driver;
String sConnStr;
String select="";
public testmt()
{
driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
sConnStr = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=TC";
}
private void SearchData(){
try {
conn = DriverManager.getConnection(sConnStr,"sa","sd123321");
Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); select = "select TOP 1 * from Tc_SmsMt order by newid()";
rs = stm.executeQuery(select);
rs.last();
rs.first();
}
catch (Exception e) {
e.printStackTrace();
}
}
private void InsterData(String Mobile,int Result,String ServiceId,String SrcId){
try{
String Deliver=Integer.toString(Result);
conn = DriverManager.getConnection(sConnStr,"sa","sd123321");
PreparedStatement pstmt=conn.prepareStatement("insert into Tc_SmsMt_D(Mobile,ServiceId,Deliver,SrcId) " +
"values (?,?,?,?)"); pstmt.setString(1,Mobile);
pstmt.setString(2,ServiceId);
pstmt.setString(3,Deliver);
pstmt.setString(4,SrcId);
pstmt.executeUpdate();
pstmt.close();
conn.close();
}
catch (Exception e) {
e.printStackTrace();
}
} private void DelData(String MessageCoad){
try{
conn = DriverManager.getConnection(sConnStr,"sa","sd123321");
PreparedStatement pstmt=conn.prepareStatement("delete TOP 1 * from Tc_SmsMt");
conn.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[])
{
testmt SD = new testmt();
SD.SearchData();
testmt ID = new testmt();
ID.InsterData();
testmt DD = new testmt();
DD.DelData(String MessageCoad);
}
} 这个程序可能不全,要实现的功能如下:
1、先获取Tc_SmsMt表中首列数据;
2、把Tc_SmsMt表中获取的数据,选择几个字段内容写入历史记录表Tc_SmsMt_D中;
3、然后把Tc_SmsMt表中的旧数据删除。 请各位达人帮忙看看这三个方法写得对么
InsterData()和DelData()方法的参数是来自SearchData()
InsterData()和DelData()带参数的方法不会调用啊
.....
调用的时候传入这4个参数就行了
你现在这样肯定不行 你的方法是带参数的 调用的时候却没传参数 java基础可能不太好
不行再问
private void SearchData(){
try {
conn = DriverManager.getConnection(sConnStr,"sa","sd123321");
Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
select = "select TOP 1 * from Tc_SmsMt order by newid()";
rs = stm.executeQuery(select);
int Mobile = rs.getInt("Mobile");
int ServiceId = rs.getInt("ServiceId");
int SrcId = rs.getInt("SrcId");
int Deliver = rs.getInt("Deliver"); rs.last();
rs.first();
}
catch (Exception e) {
e.printStackTrace();
}
}
我加了几个变量 不知道对不对
还有就是get方法如何设置啊?
整了两次都不对
.....
java初学啊
像3楼那样定义4个int 它们的作用域只在SearchData()这个方法里 方法结束后这4个变量就消失了
所以可以定义在最外面,和conn,sta那些放在一起 再设置4个get方法 方法体就是简单的return Mobile这样就行
在然后在main中 执行SearchData()后 可以用你的testmt实例的get方法得到这4个变量 再调用你的InsterData方法传入4个参数就行了(还有你想写的是Insert吧?拼错了)
import javax.swing.*;
import java.sql.*;public class testmt {
Connection conn;
Statement sta;
ResultSet rs;
String driver;
String Mobile;
String ServiceId;
String SrcId;
String Deliver;
String sConnStr;
String select="";
public testmt()
{
driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
sConnStr = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=TC";
}
private void SearchData(){
//int intRowCount=0;
try {
conn = DriverManager.getConnection(sConnStr,"sa","sd123321");
Statement stm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
System.out.println("2");
select = "select TOP 1 * from Tc_SmsMt order by newid()";
rs = stm.executeQuery(select);
rs.last();
System.out.println("adf");
System.out.println(rs.getInt("Mobile"));
rs.first();
}
catch (Exception e) {
e.printStackTrace();
}
}
private void InsterData(String Mobile,int Result,String ServiceId,String SrcId){
try{
Deliver=Integer.toString(Result);
conn = DriverManager.getConnection(sConnStr,"sa","sd123321");
System.out.println("v");
//String t1 = new SearchData(rs);
PreparedStatement pstmt=conn.prepareStatement("insert into Tc_SmsMt_D(Mobile,ServiceId,Deliver,SrcId) " +
"values (?,?,?,?)");
System.out.println("4");
pstmt.setString(1,Mobile);
pstmt.setString(2,ServiceId);
pstmt.setString(3,Deliver);
pstmt.setString(4,SrcId);
pstmt.executeUpdate();
System.out.println("vv");
System.out.println(pstmt.executeUpdate());
pstmt.close();
conn.close();
System.out.println("5");
}
catch (Exception e) {
e.printStackTrace();
}
}
private void DelData(String MessageCoad){
try{
conn = DriverManager.getConnection(sConnStr,"sa","sd123321");
//String t1 = new SearchData(rs);
PreparedStatement pstmt=conn.prepareStatement("delete TOP 1 * from Tc_SmsMt");
conn.close();
}
catch (Exception e) {
e.printStackTrace();
} }
public String getMobile(){
return Mobile;
}
public String getServiceId(){
return ServiceId;
}
public String getSrcId(){
return SrcId;
}
public String getDeliver(){
return Deliver;
}
public static void main(String args[])
{
String str;
String str2;
String str3;
String str4;
int a;
testmt SD = new testmt();
SD.SearchData();
testmt Mobile = new testmt();
str = Mobile.getMobile();
testmt ServiceId = new testmt();
str2 = ServiceId.getServiceId();
testmt SrcId = new testmt();
str3 = SrcId.getSrcId();
testmt Deliver = new testmt();
str4 = Deliver.getDeliver();
a = Integer.parseInt(str4);
testmt ID = new testmt();
ID.InsterData(str,a,str2,str3);
testmt DD = new testmt();
//DD.DelData();
}
}修改了一下 但是get方法取得的值为空
有点不解 是不是我get方法设置错误了
...
你的SearchData()方法里rs变量已经取得数据库的值了 所以只需要用rs.next()方法取值赋值给它们就行(具体是不是这个next方法我记不清了)
2.你的main里面的testmt实例只需要new一个就行了 不用new 4个
3.get方法没问题 很正确
我试了下返回参数集rs
然后在get方法中取参数值
如public String getServiceId(){
try {
Si = this.SearchData().getString(ServiceId);
} catch (SQLException e) {
e.printStackTrace();
}
return Si;
}
好像也不行 郁闷啊
我在想要不用set方法置值
然后再get出来
不知道这样行不行...