ورود

View Full Version : سوال: چند مشکل در پیاده سازی برنامه



daryagame
پنج شنبه 20 آذر 1393, 20:46 عصر
سلام.
خدمت عزیزان باید بگم که چند تا مشکل کوچک در اجرای برنامه داشتم که امیدوارم بتونین بنده رو راهنمایی کنین.

1 - اینکه در برنامه ام برای هر انبار یک ID بعنوان کلید اصلی مشخص شده. (بصورت اینتیجر)
زمانی که میخوام آیدی رو فراخوانی کنم (مثل قطعه کد زیر) بدلیل اینکه با متدهایی مثل Settext که مخصوص String هست، کار میکنم ارور زیر رو دریافت میکنم:


String Add1 = rs.getString("ID");
jTextField_Id.setText(Add1);



run:
Comparisons between 'INTEGER' and 'CHAR (UCS_BASIC)' are not supported. Types must be comparable. String types must also have matching collation. If collation does not match, a possible solution is to cast operands to force them to the default collation (e.g. SELECT tablename FROM sys.systables WHERE CAST(tablename AS VARCHAR(128)) = 'T1')

ahmad.mo74
پنج شنبه 20 آذر 1393, 20:57 عصر
سلام، اگر ID از جنس Integer هست طبیعتا باید از

resultSet.getInt("ID")

استفاده کنید.

daryagame
پنج شنبه 20 آذر 1393, 21:05 عصر
سلام، اگر ID از جنس Integer هست طبیعتا باید از

resultSet.getInt("ID")

استفاده کنید.

ممنون از پاسخت احمد جان.
الان کد رو به کد زیر تغییر میدم اما خب از خط دوم مشکل میگیره که setText برای String هست.



int Add1 = rs.getInt("ID");
jTextField_Id.setText(Add1);


این کد هم برای نمایش عددی هست که در تیبل ID ذخیره شده که در TextField نمایش داده شود.

الان چند جای برنامه ام مشکلم همین هست که آیدی Int تعریف شده.

ahmad.mo74
پنج شنبه 20 آذر 1393, 21:10 عصر
ممنون :)

خب اگر دقت کنید setText پارامتری از نوع String میخواد، پس :


int Add1 = rs.getInt("ID");
jTextField_Id.setText(String.valueOf(Add1));

daryagame
پنج شنبه 20 آذر 1393, 21:16 عصر
باز هم همون ارور پست اول رو زمان Run دریافت میکنم



run:
Comparisons between 'INTEGER' and 'CHAR (UCS_BASIC)' are not supported. Types must be comparable. String types must also have matching collation. If collation does not match, a possible solution is to cast operands to force them to the default collation (e.g. SELECT tablename FROM sys.systables WHERE CAST(tablename AS VARCHAR(128)) = 'T1')



این کد این قسمت از برنامه ام :



private void jTable_StoreMouseClicked(java.awt.event.MouseEvent evt) {

try {

int row = jTable_Store.getSelectedRow();
String Table_Click = (jTable_Store.getModel().getValueAt(row, 0).toString());

Connection con = DriverManager.getConnection(host, uName, uPass);
Statement st = con.createStatement();
String SQL = "SELECT * FROM Store where ID='" + Table_Click + "'";
st=con.prepareStatement(SQL);
ResultSet rs = st.executeQuery(SQL);

if (rs.next())
{
int Add1 = rs.getInt("ID");
jTextField_Id.setText(String.valueOf(Add1));

String Add2 = rs.getString("Name");
jTextField_name.setText(Add2);

}
}
catch (Exception Del) {
System.out.println(Del.getMessage());
}

}

ahmad.mo74
پنج شنبه 20 آذر 1393, 21:25 عصر
خب این برای اینه که اشتباه select زدید، ID اینتیجر هست ولی شما توی خط 10 String دادین به جای int :


private void jTable_StoreMouseClicked(java.awt.event.MouseEvent evt) {


try {


int row = jTable_Store.getSelectedRow();
int id = Integer.parseInt(jTable_Store.getModel().getValueA t(row, 0).toString());


Connection con = DriverManager.getConnection(host, uName, uPass);
PreparedStatement st = con.prepareStatement("SELECT * FROM Store where ID=?");
st.setInt(1, id);
ResultSet rs = st.executeQuery();


if (rs.next())
{
int Add1 = rs.getInt("ID");
jTextField_Id.setText(String.valueOf(Add1));


String Add2 = rs.getString("Name");
jTextField_name.setText(Add2);


}
}
catch (Exception Del) {
System.out.println(Del.getMessage());
}


}

daryagame
جمعه 21 آذر 1393, 12:26 عصر
تشکر احمد جان، خیلی کد از سایتهای مختلف تست کرده بودم اما هیچ کدام جواب نداد.

یه سوال دیگه، الان برای متد Delete این کد رو نوشتم :



int Add1 = rs.getInt(Integer.parseInt(jTextField_Id.getText() ));
st.setString(1, String.valueOf(Add1));
st.execute();
JOptionPane.showMessageDialog(null, "Store Deleted Successfully");



اما باز ارور داد



At least one parameter to the current statement is uninitialized.


کلاً با این تبدیلات مشکل دارم.
ممنون میشم راهنمایی کنین.

ahmad.mo74
سه شنبه 25 آذر 1393, 22:11 عصر
سلام، برای delete :


try {
int id = //...;
Connection con = DriverManager.getConnection(host, uName, uPass);
PreparedStatement st = con.prepareStatement("DELETE * FROM Store where ID=?");
st.setInt(1, id);
st.executeUpdate();
JOptionPane.showMessageDialog(null, "Store Deleted Successfully");
} catch (Exception e) {
e.printStackTrace();
}

daryagame
دوشنبه 15 دی 1393, 19:24 عصر
سلام، آقا یک مشکلی که پیر کرد ما اینه که : (برای قسمت ویرایش انبار)

run:
The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL150104210645390' defined on 'Store1'.

در رابطه با تکراری بودن کلید اصلی/ راهی برای حل این مشکل هست؟

daryagame
پنج شنبه 18 دی 1393, 01:49 صبح
سلام، آقا یک مشکلی که پیر کرد ما اینه که : (برای قسمت ویرایش انبار)

run:
The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL150104210645390' defined on 'Store1'.

اما چند بار ویرایش کردم و این پیغام تکراری بودن کلید اصلی رو نمیداد، یک دفعه اینطور شد. راهی برای حل این مشکل هست؟

با سرچی که من کردم مثل اینکه راه علاج نداره.
مجبور شدم کد قسمت مربوط به آیدی انبار رو برای قسمت ادیت حذف کنم :لبخندساده:

ahmad.mo74
پنج شنبه 18 دی 1393, 09:23 صبح
سلام

کار اشتباهی کردی. این اکسپشن وقتی رخ میده که یه PK یا فیلد unique داری تو تیبلت و سعی کردی 2 تا مقدار مشابه رو وارد کنی.

ساختار تیبل و کدت رو بزار تا بگیم مشکل کجاست.