ورود

View Full Version : سوال: ارسال متن به ديتابيس



ravand
جمعه 15 اردیبهشت 1391, 12:58 عصر
ببخشيد مشكل كد من چيه؟
package be;
import java.io.*;
import java.sql.*;
import java.awt.Panel;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.*;
public class Main {
public static void main(String [] args) {
JFrame frame = new JFrame("ghar hisab");
JButton b = new JButton("save");
Panel p = new Panel();
JTextField f = new JTextField(20);
JTextField f1 = new JTextField(20);
JLabel l = new JLabel("Enter the first name");
JLabel l1 = new JLabel("Enter the first name");
String s1,s2;


p.add(l);
p.add(f);
p.add(l1);
p.add(f1);
p.add(b);
frame.setSize(400,400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.getContentPane().add(p);
s1=f.getText();
s2=f1.getText();
try {

Class.forName("org.h2.Driver");
Connection con = DriverManager.getConnection("jdbc:h2:~/test","sa", "");
Statement s=con.createStatement();
s.execute("INSERT INTO std_info"+ " (FIRSTNAME,LOSTNAME)"+ " VALUES ('"+s1+"','"+s2+"')");
s.close();
con.close();
} catch(Exception e){e.printStackTrace();}

}
}
متشكرم.

spiderman200700
جمعه 15 اردیبهشت 1391, 16:27 عصر
ظاهرا مشکلی نداره.
چه استثنایی میده؟

ravand
جمعه 15 اردیبهشت 1391, 16:33 عصر
اين پيغام خطا رو ميده

org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-165]
at org.h2.message.DbException.getJdbcSQLException(DbE xception.java:329)
at org.h2.message.DbException.get(DbException.java:16 9)
at org.h2.message.DbException.get(DbException.java:14 6)
at org.h2.store.FileLock.getExceptionAlreadyInUse(Fil eLock.java:439)
at org.h2.store.FileLock.lockFile(FileLock.java:336)
at org.h2.store.FileLock.lock(FileLock.java:128)
at org.h2.engine.Database.open(Database.java:542)
at org.h2.engine.Database.openDatabase(Database.java: 222)
at org.h2.engine.Database.<init>(Database.java:217)
at org.h2.engine.Engine.openSession(Engine.java:56)
at org.h2.engine.Engine.openSession(Engine.java:159)
at org.h2.engine.Engine.createSessionAndValidate(Engi ne.java:138)
at org.h2.engine.Engine.createSession(Engine.java:121 )
at org.h2.engine.Engine.createSession(Engine.java:28)
at org.h2.engine.SessionRemote.connectEmbeddedOrServe r(SessionRemote.java:305)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:110)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:94)
at org.h2.Driver.connect(Driver.java:72)
at java.sql.DriverManager.getConnection(DriverManager .java:582)
at java.sql.DriverManager.getConnection(DriverManager .java:185)
at be.Main.main(Main.java:40)

و فيلد ها و جدول من ايناست:

ID,FIRSTNAME,LOSTNAME
جدول : std_info
اين كدها فقط يه صفحه ي خالي ميده:
package be;
import java.io.*;
import java.sql.*;
import java.awt.Panel;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.*;
public class Main {
public static void main(String [] args) {
JFrame frame = new JFrame("ghar hisab");
JButton b = new JButton("save");
Panel p = new Panel();
JTextField f = new JTextField(20);
JTextField f1 = new JTextField(20);
JLabel l = new JLabel("Enter the first name");
JLabel l1 = new JLabel("Enter the first name");
String s1,s2;


p.add(l);
p.add(f);
p.add(l1);
p.add(f1);
p.add(b);
frame.setSize(400,400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.getContentPane().add(p);
s1=f.getText();
s2=f1.getText();
try {

Class.forName("org.h2.Driver");
Connection con = DriverManager.getConnection("jdbc:h2:~/test","sa", "");
Statement s=con.createStatement();
s.execute("INSERT INTO std_info"+ " (FIRSTNAME,LOSTNAME)"+ " VALUES ('"+s1+"','"+s2+"')");
s.close();
con.close();
} catch(Exception e){e.printStackTrace();}

}
}

ravand
جمعه 15 اردیبهشت 1391, 17:03 عصر
اون اخطاري كه براي شما گذاشتم به خاطر اجرا بودن برنامه ي h2 بود . اين كد مشكلش اينه كه ID توش نيست.
نميدونم چجوري بايد ID رو جايگزين كرد.
چون دائم به همين فيلد اخطار ميده. من وقتي id رو گذاشتم قبل از بقيه ي فيلد ها اين اخطار رو داد:

org.h2.jdbc.JdbcSQLException: Column count does not match; SQL statement:
INSERT INTO std_info (ID,FIRSTNAME,LOSTNAME) VALUES ('','') [21002-165]
at org.h2.message.DbException.getJdbcSQLException(DbE xception.java:329)
at org.h2.message.DbException.get(DbException.java:16 9)
at org.h2.message.DbException.get(DbException.java:14 6)
at org.h2.message.DbException.get(DbException.java:13 5)
at org.h2.command.dml.Insert.prepare(Insert.java:226)
at org.h2.command.Parser.prepareCommand(Parser.java:2 18)
at org.h2.engine.Session.prepareLocal(Session.java:41 5)
at org.h2.engine.Session.prepareCommand(Session.java: 364)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConn ection.java:1111)
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStat ement.java:164)
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.ja va:152)
at be.Main.main(Main.java:42)

spiderman200700
جمعه 15 اردیبهشت 1391, 19:17 عصر
خب باید ID رو هم توی queryت Set کنی. مثل این:
s.execute("INSERT INTO std_info"+ " (ID,FIRSTNAME,LOSTNAME)"+ " VALUES (1,'"+s1+"','"+s2+"')");

spiderman200700
جمعه 15 اردیبهشت 1391, 19:20 عصر
ممکنه با اجرای این کد بازم برنامه با استثنا مواجه بشه.
اگه اینطور شد استثنا رو اینجا بذار تا بگم چیکار کنی.

ravand
جمعه 15 اردیبهشت 1391, 21:25 عصر
امدم همونطوري كه شما گفته بوديد به فيلد ID مقدار يك دادم . بعد مطلب رو ارسال كردم ديدم كه به جاي ركورد يك مقدار خالي ارسال شده يعني ركورد يك پاك شده و هيچي توش نيست.
بعد امدم يه شماره اي مثل 6 دادم كه همچين ركوردي ثبت شده نداشتم بازم يه مقدار خالي ارسال شده.
package be;
import java.io.*;
import java.sql.*;
import java.awt.Panel;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.*;
public class Main {
public static void main(String [] args) {
JFrame frame = new JFrame("ghar hisab");
JButton b = new JButton("save");
Panel p = new Panel();
JTextField f = new JTextField(20);
JTextField f1 = new JTextField(20);
JLabel l = new JLabel("Enter the first name");
JLabel l1 = new JLabel("Enter the first name");
String s1,s2;
p.add(l);
p.add(f);
p.add(l1);
p.add(f1);
p.add(b);
frame.setSize(400,400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.getContentPane().add(p);
s1=f.getText();
s2=f1.getText();
try {
Class.forName("org.h2.Driver");
Connection con = DriverManager.getConnection("jdbc:h2:~/test","sa", "");
Statement s=con.createStatement();
s.execute("INSERT INTO std_info"+ " (ID,FIRSTNAME,LOSTNAME)"+ " VALUES (6,'"+s1+"','"+s2+"')");
s.close();
con.close();
} catch(Exception e){e.printStackTrace();}
}
}
و هيچ پيغامي هم جز پيغام موفقيت زير نميده:
BUILD SUCCESSFUL (total time: 17 seconds)

من بايد يه كاري كنم كه فيلد آي دي خودش اتوماتيك مقدار بگيره نه اينكه من خودم دستي يه مقدار بهش بدم.

ravand
جمعه 15 اردیبهشت 1391, 21:46 عصر
فراموش كرده بودم AUTO_INCREMENT رو هم بنويسم. كدهاي ساخت فيلد ها و جدولم اين شد:

CREATE TABLE std_info
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
PRIMARY KEY (ID)
)
ولي هنوز مقادير خالي به جدول ارسال ميشه . و مشكل من حل نشده.

spiderman200700
جمعه 15 اردیبهشت 1391, 23:13 عصر
من نمیدونم چرا مقدار خالی به دیتا بیس ارسال میشه.
و لی شما الآن دارید از حالت Server برای H2 استفاده می کنید. پیشنهاد میکنم که از حالت embedded برای H2 استفاده کنید.شاید مشکل حل بشه.
با این کار فایل های دیتا بیس در کنار پروژه ساخته میشه.
در مثال زیر اول یه دیتا بیس ساخته و بهش وصل میشیم. بعد یه جدول میسازیم و یه رکورد به جدول اضافه می کنیم.

Class.forName("org.h2.Driver");
connection = DriverManager.getConnection("jdbc:h2:DatabaseName", "", "");
st = connection.createStatement();
st.execute("CREATE TABLE std_info(ID int NOT NULL AUTO_INCREMENT"
+ ",LastName varchar(255) NOT NULL"
+ ",FirstName varchar(255) NOT NULL"
+ ",PRIMARY KEY (ID))");
st.executeQuery("insert into std_info values(1,'hamid','omidi')");

ravand
شنبه 16 اردیبهشت 1391, 09:59 صبح
خب اين كاري كه شما كرديد يك بار جدول با فيلد هاش ايجاد ميشه و يه بارم مقادير زير وارد ميشه:

1,'hamid','omidi'
من ميخوام هر وقت كه خواستم بتونم مقاديرم رو به جدول وارد كنم.
شما با كد بالا هر بار ميخواي جدول رو ايجاد كنه . ولي ما يه بار فقط ميخوايم جدول رو ايجاد كنيم. و هر بار ميخوايم مقدار ديگري رو به غير از مقادير 1,'hamid','omidi' رو به جدول وارد كنيم.

ravand
شنبه 16 اردیبهشت 1391, 12:51 عصر
امدم id رو از ديتابيس هم حذف كردم بازم مقدار خالي ارسال ميكنه:
package be;
import java.io.*;
import java.sql.*;
import java.awt.Panel;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.*;
public class Main {
public static void main(String [] args) {
JFrame frame = new JFrame("ghar hisab");
JButton b = new JButton("save");
Panel p = new Panel();
JTextField f = new JTextField(20);
JTextField f1 = new JTextField(20);
JLabel l = new JLabel("Enter the first name");
JLabel l1 = new JLabel("Enter the first name");

p.add(l);
p.add(f);
p.add(l1);
p.add(f1);
p.add(b);
frame.setSize(400,400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.getContentPane().add(p);
String s1,s2;
s1=f.getText();
s2=f1.getText();
try {
Class.forName("org.h2.Driver");
Connection con = DriverManager.getConnection("jdbc:h2:~/test","sa", "");
Statement s=con.createStatement();
s.execute("INSERT INTO std_info"+ " (LastName,FirstName)"+ " VALUES ('"+s1+"','"+s2+"')");
s.close();
con.close();
} catch(Exception e){e.printStackTrace();}
}
}

جدول:

CREATE TABLE std_info
(
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL
)

spiderman200700
شنبه 16 اردیبهشت 1391, 14:49 عصر
حقیقتش من نمیتونم بفهمم چرا اینشکلی میشه.
ولی این اینم یه کد برای اینکه هر دفعه جدول ایجاد نشه.

try {
File db = new File("Data\\YourDatabase.h2.db");
Class.forName("org.h2.Driver");
if (!db.exists()) {
connection = DriverManager.getConnection("jdbc:h2:Data\\YourDatabase", "", "");
st = connection.createStatement();
st.execute("CREATE TABLE notepad(ID INT PRIMARY KEY, title VARCHAR(255), text TEXT,date TEXT,time text)");

} else {
connection = DriverManager.getConnection("jdbc:h2:Data\\YourDatabase", "", "");
st = connection.createStatement();
}

ravand
شنبه 16 اردیبهشت 1391, 15:28 عصر
اين چيزي كه شما نوشتي مقداري رو از فرم دريافت نميكنه .
من چيزي ميخوام كه مقداري رو از فرم دريافت كنه و به ديتابيس ارسال كنه . در واقع ميخوام كه دو تا تكست داشته باشيم كه متن توش بنويسيم و به ديتابيس ارسالش كنيم.
اين كد چيزي هست كه من نوشتم و مقداري رو از فرم دريافت نميكنه .
package be;
import java.io.*;
import java.sql.*;
public class Main {
public static void main(String[] args) {
try {
Connection con=null;
Class.forName("org.h2.Driver");
con=DriverManager.getConnection("jdbc:h2:~/test","sa","");
Statement s=con.createStatement();
s.execute("INSERT INTO std_info"+ " (ID, FIRSTNAME,LOSTNAME)"+ " VALUES (4, 'ali', 'ahmad')");
s.close();
con.close();
} catch(Exception e){e.printStackTrace();}
}
}

spiderman200700
شنبه 16 اردیبهشت 1391, 17:57 عصر
خب همینطوری که متن از فرم نمیاد بره توی دیتابیس. باید مقدار رو از ازش بگیری دیگه.
مثلا از یه TextField با نام txfName باید اینطوری مقدارشو بگیری:
String name = TXFName.getText();

ravand
شنبه 16 اردیبهشت 1391, 18:38 عصر
خب اين يعني شما به كدهاي من دقت نكرديد . يه بار ديگه نگاش كنيد.
اين كدها رو ببينيد . همون كاري هست كه شما ميگيد:
JTextField f = new JTextField(20);
JTextField f1 = new JTextField(20);
s1=f.getText();
s2=f1.getText();

spiderman200700
شنبه 16 اردیبهشت 1391, 21:24 عصر
خب پس دیگه مشکل چیه؟
اینکه اطلاعات خالی به دیتابیس ارسال میشه؟
خب شما با اون روشی که من گفتم به دیتابیس وصل بشید، شاید درست شد.

ravand
شنبه 16 اردیبهشت 1391, 21:27 عصر
خب اون روشي هم كه شما انجام ميدي رو من گفتم براي چي نميتونم استفاده كنم.
اگه ميشه اين روش من رو شما تست كنيد ببينيد جواب ميده يا نه؟
متشكرم.

spiderman200700
یک شنبه 17 اردیبهشت 1391, 01:26 صبح
من همه ی روش ها رو امتحان کردم و مشکلی نبوده.

ravand
یک شنبه 17 اردیبهشت 1391, 07:15 صبح
يعني شما دقيقا اين كد منو تست كرديد مشكلي نداشت؟
package be;
import java.io.*;
import java.sql.*;
import java.awt.Panel;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.*;
public class Main {
public static void main(String [] args) {
JFrame frame = new JFrame("ghar hisab");
JButton b = new JButton("save");
Panel p = new Panel();
JTextField f = new JTextField(20);
JTextField f1 = new JTextField(20);
JLabel l = new JLabel("Enter the first name");
JLabel l1 = new JLabel("Enter the first name");

p.add(l);
p.add(f);
p.add(l1);
p.add(f1);
p.add(b);
frame.setSize(400,400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.getContentPane().add(p);
String s1,s2;
s1=f.getText();
s2=f1.getText();
try {
Class.forName("org.h2.Driver");
Connection con = DriverManager.getConnection("jdbc:h2:~/test","sa", "");
Statement s=con.createStatement();
s.execute("INSERT INTO std_info"+ " (LastName,FirstName)"+ " VALUES ('"+s1+"','"+s2+"')");
s.close();
con.close();
} catch(Exception e){e.printStackTrace();}
}
}
چه دليلي ممكنه داشته باشه كه براي من كار نكنه؟
من يادمه يه همچين مشكلي رو توي كدنويسي php داشتم ولي يادم نيست چجوري حل شد.

ravand
یک شنبه 17 اردیبهشت 1391, 07:19 صبح
ما توي php يه دستوري داريم به نام:

or die(mysql_error()
كه اگه هر مشكلي در كار پيش بياد به ما اطلاع ميده توي جاوا بايد از چي استفاده كنم؟
مثلا اين كد php رو نگاه كنيد براي انتخاب فيد هاي جدول هست:

$Q=mysql_query("SELECT * FROM `posts`") or die(mysql_error());
اگه مشكلي در حين انتخاب پيش بياد اخطار ميده ، اگه نمونه اي از همين دستور توي جاوا باشه شايد بتونه به من كمك كنه

spiderman200700
یک شنبه 17 اردیبهشت 1391, 10:09 صبح
توی جاوا Exception وجود داره و با بلاک های try و Catch مدیریت میشن. یعنی Error نداریم.
با e.printStackTrace() هم میتونی بفهمی مشکل از کجاست. البته فقط استثنا ها رو میفهمی.
اگر StackTrace مربوط به استثنا ، توی خروجی چاپ نمیشه، معلوم میشه که اصلا استثنا وجود نداره و توی اجرای دستورات هیچ مشکلی نیست.
اشکال هر چی هست از طرف خود شماس. حالا شاید توی آدرس دهی مسیر دیتابیس یه جا مشکل هست.این فقط یه حدسه.

ravand
یک شنبه 17 اردیبهشت 1391, 10:42 صبح
فكر نكنم كه با Exception باشه. چون ما در php هم يه بحثي با عنوان استثناعات داريم.
در مورد اتصال به بانك هم بايد بگم كه مشكلي وجود نداره چون من با كد قبلي كه بهتون دادم و نياز به فرم نداشت تونستم مقادير رو به ديتابيس ارسال كنم ولي اين كدي كه فرم داره نميتونه مقادير رو به ديتابيس ارسال كنه. پس نتيجه ميگيريم كه مشكل از ارسال مقادير از فرم به ديتابيس هست.
همين كدهايي كه بهتون دادم رو من برداشتم و اين مقادير رو بهش اضافه كردم .
f.setText("ali");
f1.setText("mohammad");
با اين كار مقدار ali و mohammad به جدول در بانك اطلاعاتي اضافه شده در صورتي كه قبلا فقط فضاي خالي ارسال ميشد.
كدهاي من اين شكلي شد.
package be;
import java.io.*;
import java.sql.*;
import java.awt.Panel;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.*;
public class Main {
public static void main(String [] args) {
JFrame frame = new JFrame("ghar hisab");
JButton b = new JButton("save");
Panel p = new Panel();
JTextField f = new JTextField(20);
JTextField f1 = new JTextField(20);
JLabel l = new JLabel("Enter the first name");
JLabel l1 = new JLabel("Enter the first name");

p.add(l);
p.add(f);
p.add(l1);
p.add(f1);
p.add(b);
frame.setSize(400,400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.getContentPane().add(p);
f.setText("ali");
f1.setText("mohammad");
String s1=f.getText();
String s2=f1.getText();

try {
Class.forName("org.h2.Driver");
Connection con = DriverManager.getConnection("jdbc:h2:~/test","sa", "");
Statement s=con.createStatement();
s.execute("INSERT INTO std_info"+ " (LastName,FirstName)"+ " VALUES ('"+s1+"','"+s2+"')");
s.close();
con.close();
} catch(Exception e){e.printStackTrace();}
}
}
پس بايد ببينيم كه مشكل ارسال اطلاعات چيه؟
شايد من حروف بزرگ و كوچك رو رعايت نميكنم .
صد در صد يه اشكال جزئي در كار هست . مي تونيد يه نگاهي به كدها بكنيد؟
متشكرم.

ravand
یک شنبه 17 اردیبهشت 1391, 11:50 صبح
يه چيز ديگه هم فهميدم اينكه اصلا اين مقادير خالي كه به ديتابيس ارسال ميشه با كليك روي دكمه نيست در واقع وقتي من اين فايل رو اجرا ميكنم خودش مقادير خالي به ديتابيس ارسال ميشه.

spiderman200700
یک شنبه 17 اردیبهشت 1391, 20:07 عصر
تازه فهمیدم مشکل چیه. :لبخندساده: :لبخندساده: :لبخندساده:

من فکر میکردم شما یه قسمت از کدهاتون رو اینجا گذاشتید. ولی اشتباه می کردم شما همهی کدی رو که دارید رو اینجا گذاشتی. چه مشکل بدیهی ای.

مشکل کد قبلی شما که توی دیتابیس مقدار خالی ست می شد این بود که، موقعی که اطلاعات داره به دیتا بیس فرستاده میشه، TextField هات هیچ مقداری توش نیست.
یعنی شما باید یه دکمه بذاری، تا وقتی روی دکمه کلیک میکنی، اطلاعات توی دیتابیس ست بشه. یعنی باید به متغییر b که یه JButton هست، یه ActionListener اضافه کنی و کدهایی که مربوط به فرستادن اطلاعات به دیتابیس هست رو توی این ActionListener بنویسی.
به همین راحتی.

مثل این:
b.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
try {
Class.forName("org.h2.Driver");
Connection con = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
Statement s = con.createStatement();
s.execute("INSERT INTO std_info" + " (LastName,FirstName)" + " VALUES ('" + f.getText() + "','" + f1.getText() + "')");
s.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
});

spiderman200700
یک شنبه 17 اردیبهشت 1391, 20:12 عصر
البته اگه این خط رو اول متد بنویسی بهتره:
Class.forName("org.h2.Driver");

ravand
یک شنبه 17 اردیبهشت 1391, 21:05 عصر
بله حق با شماست . اصلا فكر نكردم كه بايد با يه چيزي مثل action كه توي html مقصد فرم رو مشخص ميكردم اينجا هم بايد مقصد رو معين كنم.
الان اين كل كدهاي منه :
package be;
import java.io.*;
import java.sql.*;
import java.awt.Panel;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.*;
public class Main {
public static void main(String [] args) {
JFrame frame = new JFrame("onvan");
Panel p = new Panel();
JButton b = new JButton("save");
JTextField f = new JTextField(20);
JTextField f1 = new JTextField(20);
JLabel l = new JLabel("Enter the first name");
JLabel l1 = new JLabel("Enter the first name");

p.add(l1);
p.add(l);
p.add(f1);
p.add(f);
p.add(b);
frame.setSize(400,400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.getContentPane().add(p);

String s1=f.getText();
String s2=f1.getText();
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
Class.forName("org.h2.Driver");
Connection con = DriverManager.getConnection("jdbc:h2:~/test","sa", "");
Statement s=con.createStatement();
s.execute("INSERT INTO std_info"+ " (LastName,FirstName)"+ " VALUES ('"+s1+"','"+s2+"')");
s.close();
con.close();
} catch(Exception e){e.printStackTrace();}
}
}
}
}
كاش شما هم كل كدهاتون رو براي من ميذاشتيد . چون من مبتدي هستم و گيج ميشم . الان كدهاي بالا كار نميكنه و من نميدونم چه اشتباهي دارم.
متشكرم.

spiderman200700
دوشنبه 18 اردیبهشت 1391, 00:12 صبح
اینم یه کد که کامل کار میکنه و فکر کنم اصولی باشه:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class TestDB extends JFrame {

private JButton addDB;
private JTextField tx1, tx2;

public TestDB() {
super("Test Dabatbase");
setDefaultCloseOperation(EXIT_ON_CLOSE);
try {
Class.forName("org.h2.Driver");
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}

tx1 = new JTextField();
tx1.setColumns(10);

tx2 = new JTextField();
tx2.setColumns(10);

addDB = new JButton("Click to add");
addDB.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
try {
Connection con = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
Statement s = con.createStatement();
s.execute("INSERT INTO std_info" + " (LastName,FirstName)" + " VALUES ('" + tx1.getText()
+ "','" + tx2.getText() + "')");
s.close();
con.close();

JOptionPane.showMessageDialog(null, "one row added", "ok", JOptionPane.INFORMATION_MESSAGE);
} catch (SQLException ex) {
ex.printStackTrace();
}
}
});

add(tx1);
add(tx2);
add(addDB);
}

public static void main(String args[]) {
TestDB testdb = new TestDB();
testdb.setLayout(new FlowLayout(FlowLayout.CENTER));
testdb.setSize(160, 130);
testdb.setVisible(true);
}
}

ravand
دوشنبه 18 اردیبهشت 1391, 09:47 صبح
ببخشيد نميدونم چرا اين اخطار رو بهم ميده:

init:
deps-jar:
compile:
run:
java.lang.ClassNotFoundException: org.h2.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java: 200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.j ava:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:3 06)
at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:2 51)
at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at po.TestDB.<init>(TestDB.java:24)
at po.TestDB.main(TestDB.java:61)
BUILD SUCCESSFUL (total time: 12 seconds)

spiderman200700
دوشنبه 18 اردیبهشت 1391, 10:06 صبح
بازم باید فایل دیتابیس H2 رو به برنامه اضافه کنی. بهت گفتم توی NetBeans چطوری باید این کار رو بکنی.