Связь java Постглинистый песчаник в Netbeans

Я хотел бы сделать им консультацию, правда состоит в том, что я новый в этом, я - студент программирования и у меня есть маленький проект.

В настоящее время я реализую программу, где смогли храниться данные людей, в NetBeans. Мой вопрос: Как я произвожу связь в базу данных между постглинистым песчаником и Java? Как я произвожу queries для того, чтобы, когда он выберет кнопку сохранения info, он сохранял в базе данных постглинистого песчаника?

2
задан 08.04.2016, 00:47
3 ответа

В действительности я думаю, что это достаточно просто и есть достаточно информации, я дам тебе немного информации, предполагая у тебя есть твоя база данных ты можешь реализовывать это с JDBC, можешь загружать .jar с: https://jdbc.postgresql.org/download.html

Это был бы основной пример, только конфигурируй твою реальную базу данных, пользователь и password:

import java.sql.Connection;
import java.sql.DriverManager;

public void realizaConexion(){
            Connection conn = null;
            String urlDatabase =  "jdbc:postgresql://localhost:0000/midatabase"; 
            try {
                Class.forName("org.postgresql.Driver");
                conn = DriverManager.getConnection(urlDatabase,  "usuario", "password");
            } catch (Exception e) {
                System.out.println("Ocurrio un error : "+e.getMessage());
            }
            System.out.println("La conexión se realizo sin problemas! =) ");
}

Руководитель, который превосходный, но приходит на английском: http://www.tutorialspoint.com/postgresql/postgresql_java.htm

3
ответ дан 24.11.2019, 14:37

Как я произвожу связь в базу данных между постглинистым песчаником и Java?

У тебя есть два способа это делать. Первая, которая состоит в том, чтобы открывать связь вручную. В Востоке, в свою очередь, есть два способа, завися, если драйвер связи в твою базу данных выносит JDBC 4 или нет.

Если он не выносит JDBC 4, будь должен выполнять следующее:

public Connection getConnection() throws Exception {
    String urlDatabase =  "jdbc:postgresql://localhost:5432/midatabase";
    Class.forName("org.postgresql.Driver"); //cargar el driver manualmente
    conn = DriverManager.getConnection(urlDatabase,  "usuario", "password");
}

Если драйвер выносит JDBC 4 тогда, уже ты не нуждаешься в том, чтобы загрузить класс, а следовательно код сокращается:

public Connection getConnection() throws Exception {
    String urlDatabase =  "jdbc:postgresql://localhost:5432/midatabase";
    conn = DriverManager.getConnection(urlDatabase,  "usuario", "password");
}

Эта первая форма служит для маленьких приложений консоли, рабочего стола, личных или "игрушки". Для приложений, которые ты пошлешь в производство, которое ты думаешь продавать, которое они должны быть профессиональнее, ты не должен использовать первую форму, так как каждый раз, когда он работает DriverManager#getConnection открывается физическая связь для механизма базы данных (дорогая операция) и каждый раз, когда закрывается связь путь Connection#close закрывается эта физическая связь. Выполнение этой операции многообразные разы затрагивает результат приложения. Из-за этого, решение состоит в том, чтобы использовать пул связей через интерфейс DataSource. Глаз, есть другие книжные магазины, которые уже осуществляют этот интерфейс и хранят связи так что ты не нуждаешься в том, чтобы изобрести колесо заново. Чтобы этого добиваться, ты используешь один из двух выборов:

  1. Если твое приложение или приложения будут содержаться на сервере приложений (JBoss, Wildfly, WebLogic, Ай-Би-Эм Was, и т.д.) или контейнер servlets (Tomcat, Свитер, и т.д.), ты можешь конфигурировать пул связей и потом это получать путь JNDI. Конфигурация пула связей зависит от каждого сервера aplicaiones или контейнера servlets, но в твоем коде Java ты получил бы связь таким образом:

    public Connection getConnection() throws Exception {
        final String DATASOURCE_CONTEXT = "..."; //nombre de tu pool de conexiones
        Context initialContext = new InitialContext();
        DataSource datasource = (DataSource)initialContext.lookup(DATASOURCE_CONTEXT);
        return datasource.getConnection();
    }
    
  2. Если твое приложение работает в консоли, на рабочем столе или просто тебе не нравится зависеть конфигурировать пул связей в контейнере, тогда ты можешь использовать один DataSource. Осуществление этого интерфейса будет открывать группу физических связей в базу данных и поддерживать их открытыми в то время как твое приложение продолжит работать, так что ты можешь повторно использовать связи в многообразных операциях. Это увеличивает результат твоего приложения.

    Существуют несколько книжных магазинов, которые поставляют эту функциональность как HikariCP, C3PO, Апачи Commons DBCP, и т.д. Главным образом, они поставляют класс, который осуществляет интерфейс DataSource так что ты заканчиваешь тем, что звонишь в эту инстанцию и оно получать связь оттуда прямо. Здесь пример с HikariCP (лично, мой фаворит). Конфигурация осуществляется следующего способа:

    public DataSource getDataSource() {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:postgresql://localhost:5432/midatabase");
        config.setUsername("usuario");
        config.setPassword("password");
        config.addDataSourceProperty("cachePrepStmts", "true");
        config.addDataSourceProperty("prepStmtCacheSize", "250");
        config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
    
        HikariDataSource ds = new HikariDataSource(config);
    }
    
    public Connection getConnection(DataSource dataSource) {
        return dataSource.getConnection();
    }
    

    Рисунок наверху позволяет: метод, чтобы создавать DataSource и что клиент вышеупомянутого класса уверяет, что верит единственный раз. Потом, нижний метод позволяет использовать инстанцию DataSource чтобы получать связь. Пример используя как основание предыдущий код и используя singleton был бы:

    //los enum en Java son singleton por defecto
    public enum ConexionesBaseDatos {
        private final DataSource dataSource;
        POSTGRES;
    
        private ConexionesBaseDatos() {
            dataSource = getDataSource("jdbc:postgresql://localhost:5432/midatabase", "usuario", "password");
        }
    
        private DataSource getDataSource(String constr, String usuario, String password) {
            HikariConfig config = new HikariConfig();
            config.setJdbcUrl(constr);
            config.setUsername(usuario);
            config.setPassword(password);
            config.addDataSourceProperty("cachePrepStmts", "true");
            config.addDataSourceProperty("prepStmtCacheSize", "250");
            config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
    
            HikariDataSource ds = new HikariDataSource(config);
        }
    
        public Connection getConnection() {
            return dataSource.getConnection();
        }
    }
    

    Имей в виду, что этот рисунок одинокий пример. Могут быть другие способы это получать, и используя frameworks вставки зависимостей как Спринг или Guice получает отличный и более гибкий рисунок.

ВАЖНО

Будьте методом, который ты выбираешь, чтобы получать твою инстанцию Connection, ВСЕГДА ты должен закрывать использованную связь, а именно, ВСЕГДА должен звонить в метод Connection#close. Пример:

Connection conn = null;
try {
    conn = getConnection(); //utilizando cualquiera de los métodos de arriba
    //usar la variable con...
} finally {
    if (conn != null) {
        conn.close();
    }
}

Или используя try-with-resources с Java 7, где блок try смоги звонить автоматически в метод close из-за тебя, он имел бы эту форму:

try (Connection conn = getConnection()) {
    //usar la variable conn...
}

Когда он называется Connection#close с первого метода, физическая связь в базу данных закрывается. Когда он называется со второго метода, физическая связь возвращается в пул связей, давая возможность связи, чтобы быть повторно использованной в последующих вызовах.

Как я произвожу queries для того, чтобы, когда он выберет кнопку сохранения info, он сохранял в базе данных постглинистого песчаника?

Ты должен производить queries вручную. Java и JDBC не знают структуру твоей таблицы и не знают, как должны быть введенными поля. Для этого, если ты будешь работать с JDBC, ты можешь использовать следующий рисунок:

public class EntidadDao {

    public Connection conn;

    public EntidadDao(Connection conn) {
        this.conn = conn;
    }

    public void guardaEntidad(Entidad entidad) {
        String sql = "INSERT INTO entidad (nombre, description) VALUES (?, ?)";
        try (PreparedStatement pstmt = con.prepareStatement(sql) {
            pstmt.setString(1, entidad.getNombre());
            pstmt.setString(2, entidad.getDescripcion());
            pstmt.executeUpdate();
        } catch (Exception e) {
            //lanzar RuntimeException para tener código más limpio
            throw new RuntimeException("Error al guardar entidad.", e);
        }
    }
}
public class EntidadServicio {

    public void guardaEntidad(Entidad entidad) {
        Connection conn = null;
        try (conn = ConexionesBaseDatos.POSTGRES.getConnection()) {
            //iniciar una transacción, buena práctica
            conn.setAutoCommit(false);
            //abrir un bloque de manejo de excepciones
            try {
                //creas todos los Daos con la misma conexión para manejar
                //la misma transacción
                EntidadDao entidadDao = new EntidadDao(conn);
                entidadDao.guardaEntidad(entidad);
                //si todo funcionó sin problemas, se realiza el commit
                conn.commit();
            } catch (Exception e) {
                //si hubo algún problema, se realiza un rollback
                conn.rollback();
            }
            //se cierra la transacción
            conn.setAutoCommit(true);
        }
    }
}

Помни, что рисунок, представленный здесь основной, будь должен служить как основание, чтобы создавать рисунок, более соответствовавший твоему приложению. Также, если ты используешь frameworks вставки зависимостей как Спринг или Guice, возможно добиваться рисунка, более разъединенного между классами.

Они существуют frameworks как Hibernate и JPA, которые могут создавать scripts INSERT, UPDATE, SELECT из-за тебя согласно структуре таблицы, но это слишком большая информация для этого ответа.

3
ответ дан 24.11.2019, 14:37
  • 1
    Привет @Luiggi большое спасибо из-за твоего вклада... на самом деле ты это agradesco – Edwin Correa 09.04.2016, 05:44
  • 2
    Привет посмотрите я нашел этот код в tuturialespoint..... приложение, которое я делаю в школе, - пункт продажи fictisio для оптической консультации, в которой он просит меня, чтобы сохранять в следствии данные пациентов.... – Edwin Correa 09.04.2016, 05:54

Связь делает себе следующий способ и они меняют линии как драйвер баз данных
вводить cГіdigo aquГ -

public class Связь { {114]

private static  String user="pas";
private static String contrasenia="contra";
private static final String JDBC_driver="com.microsoft.sqlserver.jdbc.SQLServerDriver.";
private static Driver driver;
private static  String db="databaseName=FUCS";
private static final String url_JDBC="jdbc:sqlserver://BaseDeDatos;"+db;

public Conexion(){

}


public static  synchronized Connection  getConexion() throws SQLException{
    DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
    //if(driver==null){
        //try{
          //  Class JdbcDriverClass=Class.forName(JDBC_driver);
            //driver= (Driver) JdbcDriverClass.newInstance();
        //}catch(Exception ex){
          //  System.err.println("errorororoor");
        //ex.printStackTrace();
       // }
    //}
return DriverManager.getConnection(url_JDBC,user,contrasenia);
}



public static void close(PreparedStatement stat){
try{
    if(stat!=null){
        stat.close();
    }
}catch(SQLException ex){
    ex.printStackTrace();
    }
}


public static void close(ResultSet set){

try { if (set! =null) { set.close (); } } catch (SQLException экс-) { ex.printStackTrace (); } }

public static void close(Connection co){
    try{
    if(co!=null){
    co.close();
    }
    }catch(SQLException ex){
    ex.printStackTrace();
    }
}

}

1
ответ дан 24.11.2019, 14:37