Java 签入mysql返回的答案等于我发送的参数
我用java构建了一个函数,在数据库中搜索2个值,如果它们存在,则返回值Java 签入mysql返回的答案等于我发送的参数,java,mysql,Java,Mysql,我用java构建了一个函数,在数据库中搜索2个值,如果它们存在,则返回值 public List<Conniction> findPath(int one,int two){ List<Conniction> list = new ArrayList<Conniction>(); Connection c = null; String sql = "SELECT * FROM conniction WHERE oneid="+one
public List<Conniction> findPath(int one,int two){
List<Conniction> list = new ArrayList<Conniction>();
Connection c = null;
String sql = "SELECT * FROM conniction WHERE oneid="+one+"&& twoid="+two;
try {
c = ConnectionHelper.getConnection();
Statement s = c.createStatement();
ResultSet rs = s.executeQuery(sql);
ResultSetMetaData metaData = rs.getMetaData();
int columncount = metaData.getColumnCount();
//direct result
if (columncount > 0) {
System.out.println("Match one and two found!");
while (rs.next()) {
list.add(processRow(rs));
}
}
else{
String sql2 = "SELECT * FROM conniction WHERE oneid="+one;
s = c.createStatement();
rs = s.executeQuery(sql2);
metaData = rs.getMetaData();
columncount = metaData.getColumnCount();
if (columncount > 0) {
System.out.println("One Match found!");
while (rs.next()) {
list.add(processRow(rs));
}
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
公共列表findPath(int-one,int-two){
列表=新的ArrayList();
连接c=null;
String sql=“从连接中选择*,其中oneid=“+one+”&&twoid=“+two;
试一试{
c=ConnectionHelper.getConnection();
语句s=c.createStatement();
结果集rs=s.executeQuery(sql);
ResultSetMetaData元数据=rs.getMetaData();
int columncount=metaData.getColumnCount();
//直接结果
如果(列数>0){
System.out.println(“找到了匹配的1和2!”);
while(rs.next()){
添加(processRow(rs));
}
}
否则{
字符串sql2=“从连接中选择*,其中oneid=“+one;
s=c.createStatement();
rs=s.executeQuery(sql2);
元数据=rs.getMetaData();
columncount=metaData.getColumnCount();
如果(列数>0){
System.out.println(“找到一个匹配项!”);
while(rs.next()){
添加(processRow(rs));
}
}
}
}捕获(SQLE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
退货清单;
}
如何检查返回的参数值,以检查它是否真的是
oneid
和twoid
的正确答案。它总是返回与我发送的内容不同的内容 我不知道这是否是最好的解决方案,但您可以:
*为列表对象指定参数
*然后返回一个代码
*检查代码并使用列表
您的方法将列表作为参数获取:
public int findPath(List<Conniction> list, int one, int two) {
...
if (columncount > 0) {
System.out.println("Match one and two found!");
while (rs.next()) {
list.add(processRow(rs));
}
return 2;
} else {
String sql2 = "SELECT * FROM conniction WHERE oneid="+one;
s = c.createStatement();
rs = s.executeQuery(sql2);
metaData = rs.getMetaData();
columncount = metaData.getColumnCount();
if (columncount > 0) {
System.out.println("One Match found!");
while (rs.next()) {
list.add(processRow(rs));
}
return 1;
}
}
...
public int findPath(列表、int-one、int-two){
...
如果(列数>0){
System.out.println(“找到了匹配的1和2!”);
while(rs.next()){
添加(processRow(rs));
}
返回2;
}否则{
字符串sql2=“从连接中选择*,其中oneid=“+one;
s=c.createStatement();
rs=s.executeQuery(sql2);
元数据=rs.getMetaData();
columncount=metaData.getColumnCount();
如果(列数>0){
System.out.println(“找到一个匹配项!”);
while(rs.next()){
添加(processRow(rs));
}
返回1;
}
}
...
}
在代码中,在调用方法的地方检查返回:
...
List<Conniction> connlist = new ArrayList<Conniction>();
int foo = findPath(connlist , one, two);
if (foo == 1) {
/*One Match found!*/
// do something with your connlist-Object;
} else if (foo == 2) {
/*Match one and two found!*/
// do something with your connlist-Object;
}
。。。
List connlist=new ArrayList();
int foo=findPath(connlist,一,二);
如果(foo==1){
/*找到一根火柴*/
//用你的connlist对象做点什么;
}else if(foo==2){
/*找到匹配的1和2*/
//用你的connlist对象做点什么;
}
您的代码存在两个严重问题,无法正常工作:
metaData.getColumnCount()
(毫不奇怪)返回列数,而不是行数。返回的列数是一个常量,具体取决于查询中选择的内容。在本例中,您选择*
,因此元数据。getColumnCount()
将正好是连接表中的列数。在处理行集之前,您不知道行集中有多少行
“从连接中选择*,其中oneid=“+one+”或twoid=“+two
嗨,我不能发送列表作为参数,我只能发送一个和两个。我需要检查返回ResultSetMetaData metaData=rs.getMetaData()的值是什么;int columncount=metaData.getColumnCount();mybe有一个不同的函数,它可以检索列值?要获取记录集中行的列值,您必须向用户提供。获取…();看doku!或者举个例子:哦,你说得对,我需要找一排!!!抱歉,ResultSet rs=stmt.executeQuery(sql);int rowCount=rs.last()?rs.getRow():0;//结果集中的行数。别忘了将cyrsor设置为beforeFirst()行!:)