View Full Version : همه چیز درباره JDBC
Bahmany
پنج شنبه 17 آبان 1386, 06:41 صبح
سلام دوستان در این قسمت دوست دارم درباره تمامی جزئیات JDBC از پایه تا کوچکترین جزئیات بپردازیم.
دوستانی که اطلاعات و نکاتی به نظرشون می رسه خوشحال می شیم مطرح کنن و همه استفاده کنن.
Bahmany
پنج شنبه 17 آبان 1386, 06:52 صبح
به نظرم اولین کاری که برای راه اندازی یک نرم افزار بانک اطلاعاتی در جاوا باید انجام بدهیم این است که درایورهای بانک اطلاعاتی مورد نظر را به نرم افزار از طریق IDE معرفی کنیم. و بعد از معرفی Driver می تونیم از کلاس com.mysql به اون دسترسی داشته باشیم.
در جاوا فرمت خاصی برای وصل شدن با بانک های اطلاعاتی وجود دارن که خدمتون عرض خواهم کرد.
MySQL jdbc:mysql://hostname:portNumber//databaseName
ORACLE jdbc:oracle:thin:@hostname:portnumber:databaseName
DB2 jdbc:db2:hostname:portNumber/databaseName
Java DB/Apache jdbc:derby:databaseName(embedded)
Derby idbc:derby://hostname:portNumber/databaseName(network)
MSSQL idbc:sqlserver//hostname:portNumber;DatabaseName=databasename
Sybase jdbc:sybase:Tds:hostname:portNumber/databaseName
Bahmany
پنج شنبه 17 آبان 1386, 07:23 صبح
خوب توی این مثال من می خوام با استفاده از Mysql به بانک اطلاعاتی متصل شده و یک رکورد اضافه کنم:
static final String DRIVER = "com.mysql.idbc.Driver";
static final String DATABASE_URL = "jdbc:mysql://localhost/books";
public static void AddData(){
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try{
Class.forName(DRIVER);
connection = DriverManager.getConnection(DATABASE_URL,"username","pass"
);
statement = connection.createStatement();
statement.updateQuery("insert into booksname values("'Zaban','94'");
}catch(SQLException sqle){
}catch(ClassNotFoundException classe){
}
}
}
Bahmany
پنج شنبه 17 آبان 1386, 09:17 صبح
سلام
این کلاسی که سورسش رو در زیر برای شما گذاشته ام دستورات select رو اجرا و آن در حالت ,visual به نمایش در آورد:قهقهه:
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.SQLException;
import java.util.regex.PatternSyntaxException;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.JTable;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import javax.swing.Box;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.table.TableRowSorter;
import javax.swing.table.TableModel;
public class DisplayQueryResults extends JFrame
{
// JDBC database URL, username and password
static final String DRIVER = "com.mysql.jdbc.Driver";
static final String DATABASE_URL = "jdbc:mysql://localhost/books";
static final String USERNAME = "jhtp7";
static final String PASSWORD = "jhtp7";
// default query retrieves all data from authors table
static final String DEFAULT_QUERY = "SELECT * FROM authors";
private ResultSetTableModel tableModel;
private JTextArea queryArea;
// create ResultSetTableModel and GUI
public DisplayQueryResults()
{
super( "Displaying Query Results" );
// create ResultSetTableModel and display database table
try
{
// create TableModel for results of query SELECT * FROM authors
tableModel = new ResultSetTableModel( DRIVER, DATABASE_URL,
USERNAME, PASSWORD, DEFAULT_QUERY );
// set up JTextArea in which user types queries
queryArea = new JTextArea( DEFAULT_QUERY, 3, 100 );
queryArea.setWrapStyleWord( true );
queryArea.setLineWrap( true );
JScrollPane scrollPane = new JScrollPane( queryArea,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
// set up JButton for submitting queries
JButton submitButton = new JButton( "Submit Query" );
// create Box to manage placement of queryArea and
// submitButton in GUI
Box boxNorth = Box.createHorizontalBox();
boxNorth.add( scrollPane );
boxNorth.add( submitButton );
// create JTable delegate for tableModel
JTable resultTable = new JTable( tableModel );
JLabel filterLabel = new JLabel( "Filter:" );
final JTextField filterText = new JTextField();
JButton filterButton = new JButton( "Apply Filter" );
Box boxSouth = boxNorth.createHorizontalBox();
boxSouth.add( filterLabel );
boxSouth.add( filterText );
boxSouth.add( filterButton );
// place GUI components on content pane
add( boxNorth, BorderLayout.NORTH );
add( new JScrollPane( resultTable ), BorderLayout.CENTER );
add( boxSouth, BorderLayout.SOUTH );
// create event listener for submitButton
submitButton.addActionListener(
new ActionListener()
{
// pass query to table model
public void actionPerformed( ActionEvent event )
{
// perform a new query
try
{
tableModel.setQuery( queryArea.getText() );
} // end try
catch ( SQLException sqlException )
{
JOptionPane.showMessageDialog( null,
sqlException.getMessage(), "Database error",
JOptionPane.ERROR_MESSAGE );
// try to recover from invalid user query
// by executing default query
try
{
tableModel.setQuery( DEFAULT_QUERY );
queryArea.setText( DEFAULT_QUERY );
} // end try
catch ( SQLException sqlException2 )
{
JOptionPane.showMessageDialog( null,
sqlException2.getMessage(), "Database error",
JOptionPane.ERROR_MESSAGE );
// ensure database connection is closed
tableModel.disconnectFromDatabase();
System.exit( 1 ); // terminate application
} // end inner catch
} // end outer catch
} // end actionPerformed
} // end ActionListener inner class
); // end call to addActionListener
final TableRowSorter< TableModel > sorter =
new TableRowSorter< TableModel >( tableModel );
resultTable.setRowSorter( sorter );
setSize( 500, 250 ); // set window size
setVisible( true ); // display window
// create listener for filterButton
filterButton.addActionListener(
new ActionListener()
{
// pass filter text to listener
public void actionPerformed( ActionEvent e )
{
String text = filterText.getText();
if ( text.length() == 0 )
sorter.setRowFilter( null );
else
{
try
{
sorter.setRowFilter(
RowFilter.regexFilter( text ) );
} // end try
catch ( PatternSyntaxException pse )
{
JOptionPane.showMessageDialog( null,
"Bad regex pattern", "Bad regex pattern",
JOptionPane.ERROR_MESSAGE );
} // end catch
} // end else
} // end method actionPerfomed
} // end annonymous inner class
); // end call to addActionLister
} // end try
catch ( ClassNotFoundException classNotFound )
{
JOptionPane.showMessageDialog( null,
"Database Driver not found", "Driver not found",
JOptionPane.ERROR_MESSAGE );
System.exit( 1 ); // terminate application
} // end catch
catch ( SQLException sqlException )
{
JOptionPane.showMessageDialog( null, sqlException.getMessage(),
"Database error", JOptionPane.ERROR_MESSAGE );
// ensure database connection is closed
tableModel.disconnectFromDatabase();
System.exit( 1 ); // terminate application
} // end catch
// dispose of window when user quits application (this overrides
// the default of HIDE_ON_CLOSE)
setDefaultCloseOperation( DISPOSE_ON_CLOSE );
// ensure database connection is closed when user quits application
addWindowListener(
new WindowAdapter()
{
// disconnect from database and exit when window has closed
public void windowClosed( WindowEvent event )
{
tableModel.disconnectFromDatabase();
System.exit( 0 );
} // end method windowClosed
} // end WindowAdapter inner class
); // end call to addWindowListener
} // end DisplayQueryResults constructor
// execute application
public static void main( String args[] )
{
new DisplayQueryResults();
} // end main
} // end class DisplayQueryResults
درباره هر خطی که اشکالی داشت بگید تا درستش کنم یا بحث کنیم
:متفکر::متفکر::متفکر:
rezaTavak
پنج شنبه 17 آبان 1386, 11:23 صبح
من نمی خواهم پست شما را خراب کنم و وسط آنها پست بزنم و ...
اما بهتر نبود اول از پایه شروع می کردید؟
مثلا برای اجرای این مثالها نیاز به jdbcdriver است . که باید در classpath یا مسیر jre/lib/ext باشد و از سایت مربوطه دانلود کرد. یکی از بهترینها mysql است که از آدرس
http://dev.mysql.com/downloads/connector/j/3.0.html
قایل دانلود است.
سپس شما باید در بانک اطلاعاتی اجازه و مجوزها و بانکهای مربوطه را بسازید.
مثلا در mysql باید کاربری ساخته شود که اجازه دسترسی به بانک را داشته باشد با این دستور که در mysql تایپ میکنید.
GRANT ALL PRIVILEGES ON *.* TO 'jhtp7'@'%' IDENTIFIED BY 'jhtp7' WITH GRANT OPTION;
و...
البته بانکهایی مانند dbf و XLS و csv نیاز به تعاریف بالا ندارد. چراکه فقط یک فایل ساده بوده که بادستورات فایلی جاوا قابل دسترسی هستند. یک نمونه راه انداز فقط خواندنی فایلهای csv در آدرس زیر است:
http://csvjdbc.sourceforge.net/
راه اندازها معمولا پولی هستند اما انواع رایگان و کد باز هم مانند نمونه های بالا در دسترسند.
و...
برای ساخت بانکها هم بسته به نوع نرم افزار تفاوت دارد مثلا dbf شاخه ای که در آن است بانک فرض می شود.
اما در mysql باید بانک در mysql وجود داشته باشد:
create database book
اینطوری بهتر نیست؟
کسی که مثالهای شما را بگیرد حتما با مشکل مواجه خواهد شد.
باز هم ببخشید
Bahmany
شنبه 19 آبان 1386, 06:54 صبح
rezaTavak جان ممنونم
نظر شما بسیار درست است واقعیتش فراموش کردم که این کار رو انجام بدم.
بنده دوست داشتم اگه می شد دوستانی که سورس رو بررسی می کردند و جایی رو نمی تونستن اجرا کنن و به مشکل می خوردند اینجا مطرح می کردند و با این دید این پست ها رو ایجاد می کنم.
من نمی خواهم پست شما را خراب کنم و وسط آنها پست بزنم و ..
اگر نظری داشتید حتما در این پست ما رو راهنمایی کنید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.